QML调用C++:QJsonArray、QJsonObject、QByteArray数据类型

在QML与C++的交互过程中,除了常用的不同属性转换,本文主要讲解QJsonArray、QJsonObject、QByteArray类型在QML中的使用,首先在cpp定义一个类注册到QML中,QML通过调用对应函数接口获取数据并显示

预定义JSON格式的前缀
    #define _id        "id"
    #define _name     "name"
    #define _major   "major"
    #define _age       "age"
注册类:qmlRegisterType<CppQJson>("CppQJson",1,0,"CppQJson");
qml中使用:import CppQJson 1.0    
    CppQJson{
        id:m_CppQJson
    }

QJsonArray

cpp中:
 QJsonArray CppQJson::getJsonArrayData()
{
    QJsonObject object;   //构造两个QJsonObject并插值
       object.insert(_id, "1234");
       object.insert(_name,"wang");
       object.insert(_age,20);
       object.insert(_major,"C++");
       QJsonObject object2;
       object2.insert(_id,"2321");
       object2.insert(_name,"he");
       object2.insert(_age,15);
       object2.insert(_major,"Python");

   QJsonArray array;  // 构造QJsonArray
       array.insert(0,"234");//插入字符串QString
       array.insert(1,object);//插入QJsonObject
       array.insert(2,object2);
       return array;
}
qml中:
    Button{
        text:"get QJsonArray Data"
        onClicked: {
            var jsonArray=m_CppQJson.getJsonArrayData()
            console.log("cpp QJsonArray is",jsonArray)
            console.log("title: ",jsonArray[0].toString())
            console.log("jsonobject 1:",jsonArray[1]["id"])

        }
    }

QJsonObject

cpp中:
QJsonObject CppQJson::getJsonObjectData()
{
    QJsonObject object;   //构造两个QJsonObject并插值
       object.insert(_id, "1234");
       object.insert(_name,"wang");
       object.insert(_age,20);
       object.insert(_major,"C++");
       QJsonObject object2;
       object2.insert(_id,"2321");
       object2.insert(_name,"he");
       object2.insert(_age,15);
       object2.insert(_major,"Python");
       QJsonArray array;
       array.insert(0,"123");
       array.insert(1,234);
       array.insert(2,true);
       array.insert(3,object2);
       object.insert("array",array);
       return object;
}
qml中:
    Button{
        text:"get QJsonObject Data"
        onClicked: {
            var jsonObject=m_CppQJson.getJsonObjectData()
            console.log("cpp QJsonObject is",jsonObject)
            console.log("object name value:",jsonObject["name"])
            console.log("object2 major value:",jsonObject["array"][3]["major"])
        }
    }

QByteArray

cpp中:
QByteArray CppQJson::getByteArrayData()
{
    QJsonObject object;   //构造两个QJsonObject并插值
       object.insert(_id, "1234");
       object.insert(_name,"wang");
       object.insert(_age,20);
       object.insert(_major,"C++");
       QJsonObject object2;
       object2.insert(_id,"2321");
       object2.insert(_name,"he");
       object2.insert(_age,15);
       object2.insert(_major,"Python");

   QJsonArray array;  // 构造QJsonArray
       array.insert(0,"234");//插入字符串QString
       array.insert(1,object);//插入QJsonObject
       array.insert(2,object2);
       // QJsonArray转换成QByteArray
       QJsonDocument document=QJsonDocument(array);
       QByteArray byte_array = document.toJson();
       return byte_array;
}
qml中:
 Button{
        text:"get QByteArray Data"
        onClicked: {
            var byteArray=m_CppQJson.getByteArrayData()
            console.log("cpp QByteArray is",byteArray)   //JSON文本

           var obj=JSON.parse(byteArray)  //JSON文本转js对象
            console.log("cpp obj is",obj)
            console.log("title: ",obj[0])
            console.log("jsonobject 1:",obj[1]["id"])

            var jsonString=JSON.stringify(obj)   //js对象转JSON文本
            console.log("cpp jsonString is ",jsonString)
        }
    }

总结:1.主要涉及QJsonArray、QJsonObject、QByteArray数据类型在QML中显示,其中QByteArray为JSON文本,因此需要使用JSON全局单例对象的parse()方法转为ECMAScript对象。
2.简单使用了JSON全局单例对象的parse()和stringify()方法
关于QJSonArray和QJsonObject直接嵌套使用及与QByteArray的相互转化,详见:https://blog.csdn.net/qq_35173114/article/details/81024143

转载请标明出处:https://blog.csdn.net/qq_35173114/article/details/81031904

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值