4

原因や修正方法がわからないため、修正に時間がかかるという大きな問題に直面しています。問題は本当に単純です。次のように定義された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
}
4

1 に答える 1

7

ここでは問題ありません。これは、標準のQMLバインディングの動作です。JavaScriptコードでQMLウィジェットのプロパティを変更すると、そのプロパティへのすべての宣言型バインディングが終了します。イベントハンドラーのJSコードで宣言型バインディングを使用するか、値を手動で更新するかを選択できます。

編集

Rectangle {
    id: rect

    // Establishing initial value for 'test' property via QML binding
    property bool test: myclass.testproperty

    // Manual update of 'test' property when binding will be broken
    Connections {
        target: myclass
        onTestpropertyChanged: {
            rect.test = xxx
        }
    }
}
于 2012-08-11T09:58:40.217 に答える