QML は初めてで、C++ オブジェクトの property.property へのアクセスに問題があります。
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
であり、コピー可能になっているため、教科書どおりではありません。私はアイデンティティ対価値の状況を認識しています。
基本的に頻度は値オブジェクトですが、私はそれQObject
をベースにしたので、それでプロパティを使用できます ( QML で非 QObject クラスを使用する機会を参照してください)。isの例でtoString
は、動作しない場合の頻度は、派生オブジェクトQ_INVOKABLE
のコピーを返します。QObject
CFrequency
-- 編集: さらなる調査結果 --
周波数プロパティをCFrequency*
代わりに返すように変更しCFrequency
ても機能しません。私が得るようにTypeError: Cannot call method 'toQString' of undefined
、状況は同じようです。CFrequency
だけでも動作しますが、QML はそれmyatcstation.frequency
が を持つ頻度オブジェクトであることを理解していませんtoString
。