据我所知,当我尝试相互分配两个属性时会发生绑定循环。例如:
CheckBox {
checked: Settings.someSetting
onCheckedChanged: {
Settings.someSetting = checked;
}
}
但在我的情景中,我无法看到这样的"双重任务"。我在这里报告完整的代码:
import QtQuick 2.7
import QtQuick.Window 2.3
Window {
visible: true;
width: 500
height: 500
Rectangle {
id: main
anchors.fill: parent
color: "black"
property bool spinning: true
property bool stopping: false
Rectangle {
x: 0.5 * parent.width
y: 0.5 * parent.height
width: 10
height: 200
radius: 5
color: 'red'
transformOrigin: Item.Top
rotation: {
if (main.stopping)
{
main.spinning = false;
main.stopping = false;
}
return timer.angle
}
}
Timer {
id: timer
interval: 5
repeat: true
running: true
onTriggered: {
if (main.spinning) angle += 1;
}
property real angle
}
MouseArea {
id: control
anchors.fill: parent
onClicked: {
main.stopping = true;
}
}
}
}
当您点击鼠标时,您将收到警告:
qrc:/main.qml:17:9:QML矩形:为属性"旋转"
检测到绑定循环
我没有看到我的错误。我使用flags(bool变量)来控制代码的执行。我知道在这种情况下我可以直接停止计时器,但实际的程序比这个例子更复杂。
答案 0 :(得分:2)
绑定如下:
rotation: {
if (main.stopping)
{
main.spinning = false;
main.stopping = false;
}
return timer.angle
}
旋转的变化是由main.stopping的变化触发的:让我们说更改main.stopping是由mouseArea给出的,然后它会被称为旋转,但是在这里有一个if,在这里你将改回main.stopping,在那里他将召回回旋。
如果QML中的某个属性发生更改,则所有依赖它的元素都会发生变化