Qt Qml如何恢复绑定?
我试图理解在使用动态对象时绑定是如何工作的。我什么都不懂 在下面的代码中,我有“静态”绑定:Qt Qml如何恢复绑定?,qt,qml,qt5,Qt,Qml,Qt5,我试图理解在使用动态对象时绑定是如何工作的。我什么都不懂 在下面的代码中,我有“静态”绑定: property bool flag1: cfg_flag1 并创建动态绑定,将flag1设置为true, 然后我销毁绑定并确保它确实被销毁(通过日志), 在此之后,我触发初始绑定,但看起来绑定还原不起作用,它会打印: qmlscene /tmp/Test.qml qml: set flag1 to true qml: buggon1 cliecked qml: end of clicked qml:
property bool flag1: cfg_flag1
并创建动态绑定,将flag1设置为true
,
然后我销毁绑定并确保它确实被销毁(通过日志),
在此之后,我触发初始绑定,但看起来绑定还原不起作用,它会打印:
qmlscene /tmp/Test.qml
qml: set flag1 to true
qml: buggon1 cliecked
qml: end of clicked
qml: destroyed
qml: timer trigger
所以,restoreMode:Binding.RestoreBinding
不会恢复以前的绑定,或者我错过了什么
import QtQuick 2.0
import QtQuick.Controls 2.15
Rectangle {
id: rect
width: 100
height: 100
color: "red"
property bool flag1: {
console.log("set flag1 to", cfg_flag1);
return cfg_flag1;
}
property bool cfg_flag1: true
Text {
anchors.centerIn: parent
text: "flag1: " + flag1.toString() + ", cfg_flag1 " + cfg_flag1.toString()
}
Timer {
id: timer
interval: 1000
repeat: false
onTriggered: {
console.log("timer trigger");
cfg_flag1 = false;
}
}
Button {
anchors.top: parent.top
text: "button 1"
onClicked: {
console.log("buggon1 cliecked");
let temp = cmpBinding.createObject(rect, {
"target": rect,
"property": "flag1",
"value": true,
"restoreMode": Binding.RestoreBinding,
});
temp.Component.onDestruction.connect(function() { console.log("destroyed"); });
temp.destroy();
console.log("end of clicked");
timer.start();
}
}
Component {
id: cmpBinding
Binding {
}
}
}
你的代码没问题。这只是
绑定的另一个bug
要使其工作,您可以添加
“when”:true
至temp
temp.when=false代码>打开temp
的销毁
这是您编辑的代码
import QtQuick 2.0
import QtQuick.Controls 2.15
Rectangle {
id: rect
width: 100
height: 100
color: "red"
property bool flag1: {
console.log("set flag1 to", cfg_flag1);
return cfg_flag1;
}
property bool cfg_flag1: true
Text {
anchors.centerIn: parent
text: "flag1: " + flag1.toString() + ", cfg_flag1 " + cfg_flag1.toString()
}
Timer {
id: timer
interval: 1000
repeat: false
onTriggered: {
console.log("timer trigger");
cfg_flag1 = false;
}
}
Button {
anchors.top: parent.top
text: "button 1"
onClicked: {
console.log("buggon1 cliecked");
let temp = cmpBinding.createObject(rect, {
"target": rect,
"property": "flag1",
"value": true,
"restoreMode": Binding.RestoreBinding,
"when": true
});
temp.Component.onDestruction.connect(function() { temp.when = false; console.log("destroyed"); });
temp.destroy();
console.log("end of clicked");
timer.start();
}
}
Component {
id: cmpBinding
Binding {
}
}
}
请提供您的绑定对象代码。至于这个问题,我想,Binding.RestoreBinding
(这是默认值)可以恢复同一实例上的绑定。在您的情况下,您可以删除它并创建另一个实例。@这是完整的代码,您可以通过qmlscene
运行它。我不知道你提供绑定代码是什么意思。啊,我看到你从createObject
调用中创建了它的属性,但是错过了。你呢?