我面临一个大问题,即需要很长时间才能修复,因为我不知道原因以及如何修复它。问题很简单:我有一个示例 QML 组件定义为:
Rectangle {
id: rect
property bool test: myclass.testproperty
Rectangle {
width: 50
height: 50
visible: parent.test
}
}
我连接了一个 MouseArea onClicked 信号来执行此操作:
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
}