我相信新的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),它是否應該工作。 –