我相信新的QML和在访问℃的property.property有问题++对象:QML属性++对象
C++,频率和站都为Qt的元类型注册的对象:
CStation *station = new CStation(...); // QObject
CFrequency *frequency = new CFrequency(..); // QObject
QQmlContext *qmlContext = viewer.rootContext();
qmlContext->setContextProperty("myatcstation", station);
qmlContext->setContextProperty("myfrequency", frequency);
QML:
RowLayout { ....
TextField {
text: myatcstation.toQString(true)
}
}
.... text: myfrequency.toQString(true)
这个工作,但是当我写:text: myatcstation.frequency.toQString(true)
我得到TypeError: Object [object Object] has no method 'toQString'
frequency
是类CStation
一套为Q_PROPERTY(CFrequency frequency READ getFrequency)
交叉检查在C财产++作品:
CFrequency test = station->property("frequency").value<CFrequency>();
- 编辑:坦率的答案 -
两个类都从QObject
派生,它是不是按照教科书,因为它们是可复制的。我知道Identity vs value的情况。
基本上频率是一个值对象,但我已经使其基于QObject
,因此我可以使用它的属性(请参阅Any chance to use non QObject classes with QML)。在示例中,toString
是Q_INVOKABLE
,在非工作频率的情况下返回一个QObject
衍生CFrequency
对象的副本。
- 编辑:进一步的调查结果 -
当我改变频率属性返回CFrequency*
而不是CFrequency
它也不起作用。当我得到TypeError: Cannot call method 'toQString' of undefined
的情况似乎是一样的。 CFrequency
独自工作,但QML不明白,myatcstation.frequency
是一个频率对象,它有toString
。
好提示,在上面添加了一些信息。问题是,如果CFrequency(它是一个按值返回的QObject)作为副本返回(即使它不需要复制QObject),它是否应该工作。 –