加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

QML读取C++ Struct结构体类型数据

(2017-03-23 15:20:55)
标签:

qt

qml

分类: QT
QML无法直接读取C++ Struct结构体类型数据。C++类中的结构体类型成员如果要暴露给QML可以定义QVariant或QVariantMap类型属性。将结构体的成员变量付给QVariant变量。C++ QVariant变量直接对应QML的var变量。QVariantList对应QML JavaScript的Array数组,QVariantMap对应QML JavaScript的Object。这样QML就可以读取。对于数组类型的成员可以用QVariantList类型的属性来传递。

C++
//定义QVariantList类型属性
class IDControl : public QQuickItem

{

    Q_OBJECT



Q_PROPERTY(QVariantList projInfoLists READ projInfoLists)

...

//定义读取函数

     QVariantList projInfoLists() const{

         QVariantList list;

//结构体成员输出到字符串列表


         for(int i=0;i<<span style=" color:#000080;">9;i++){


             QStringList strlist;


             strlist<<QString(QMetaEnum::fromType().valueToKey(mProjInfolists[i].mPowerState)).mid(2);


             strlist<<QMetaEnum::fromType().valueToKey(mProjInfolists[i].mLampMode);


             strlist<<QString(QMetaEnum::fromType().valueToKey(mProjInfolists[i].mLamp1Status)).mid(2);


             strlist<<QString(QMetaEnum::fromType().valueToKey(mProjInfolists[i].mLamp2Status)).mid(2);


             strlist<<mProjInfolists[i].mLamp1RunTime;


             strlist<<mProjInfolists[i].mLamp2RunTime;


//字符串列表转化为QVariant列表


             QVariant variant = QVariant::fromValue(strlist);


             list << variant;


         }


         return list;


     }



QML

//建立C++类和QML之间的信号和槽连接

    Connections{

        target: idControl





        onHaveProjInfo:{


                                                                                                                                                                                                                                               //porjInfoLists[I][*]即可将结构体中的成员数据读入

for(var i=0; i<9; i++){

projectorModel.setProperty(i, "status", idControl.projInfoLists[i][0])


                projectorModel.setProperty(i, "power", idControl.projInfoLists[i][0])


                projectorModel.setProperty(i, "lampMode", idControl.projInfoLists[i][1])


                ...


            }





        }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有