QML读取C++ Struct结构体类型数据
(2017-03-23 15:20:55)
标签:
qtqml |
分类: 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])
...
}
}