原因や修正方法がわからないため、修正に時間がかかるという大きな問題に直面しています。問題は本当に単純です。次のように定義されたQMLコンポーネントの例があります。
Rectangle {
id: rect
property bool test: myclass.testproperty
Rectangle {
width: 50
height: 50
visible: parent.test
}
}
そして、これを行うために、MouseAreaonClickedシグナルを接続しました。
test = !test
そこで、ブール変数の値を切り替えます。READ、WRITE、およびNOTIFYシグナルを使用してC ++からQMLに、およびQMLからC ++ Q_PROPERTYに値をプッシュするために、これを使用しました
Binding {
target: myclass
property: "testproperty"
value: rect.test
}
mouseAreaをクリックするまではすべて正常に機能するため、バインディングを介して変更をプッシュします。その後、C ++から新しいプロパティ値を設定しようとするたびに、バインディングが破棄された場合のように、QMLに変更が表示されません。しかし、MouseAreaをクリックしようとすると、C++クラスのsetTestPropertyメソッドを呼び出します。基本的に、C++->QMLの方法で同期がとれなくなります。なんで?問題が見つかりません。QSignalSpyが使用後の放出回数として1を返すため、信号が放出されます。
emit this->testPropertyChanged(newvalue)
編集
ここに例があります。基本的にここでは、まったく同じシグナルを持つQStringプロパティを使用しています。唯一の変更点は、Rectangle QML要素を使用して独自のプロパティにバインドする代わりに、TextInput要素を使用していることです。
TextInput {
id: mytext
text: myclass.testproperty
}
Binding {
target: myclass
property: "testproperty"
value: mytext.text
}