分配给已经在 QML 中定义了绑定的 属性 是否合法

Is it legal to assign to property that already has binding defined in QML

假设 属性 'x' 在 QML 中具有直接价值, 另一个 属性 'y' 绑定到 'x'

Text { id: mytext;  x: 100;  y: x;  text: x+","+y; }

为任何属性分配另一个值是否合法? 即绑定 'y: x' 只是 deleted/overriden,还是进入某种 unsupported/erroneous 状态?

Button { onClicked: { mytext.x = 120; mytext.y = 130; } }

如果我在同一 QML 文件中明确指定另一个绑定会怎样:

Binding { target: mytext; property: "x"; value: 140; }
Binding on y { value: 150; } //insert this line into mytext

指定“when”有什么不同吗?我可以指定多个条件绑定吗?

Binding { target: mytext; property: "x"; value: 160; when: width < 600; }
Binding { target: mytext; property: "x"; value: 170; when: width > 800; }

动画或行为有什么不同吗?

NumberAnimation on x { from: 100; to: 200; duration: 500 } //insert line into mytext
NumberAnimation { target: mytext; property: "y"; from: 100; to: 200; duration: 500 }

从 C++ 代码分配(或创建绑定)有什么不同吗?

mytextPointer->setX(190);

请注意,我不是在问这个 是否在你的系统上工作 - 相反我想知道这段代码是否应该按预期工作

我的意图是:

我目前对文档的理解是:

一个问题包含了很多问题。我将专注于您陈述的意图:

  • "directly specified" values (x=100 and y=x) are default,

  • whenever they are assigned, their value is replaced with whatever was assigned

如果你有绑定,像这样:

Text { id: mytext;  x: 100;  y: x;  text: x+","+y; }

然后您更改 x 的值,在引擎盖下它应该发出 xChanged 信号。绑定意味着 y 将监听该信号并相应地更新。

现在,如果您稍后更改 y,就像这样:

Button { onClicked: { mytext.y = 130; } }

绑定已损坏。 y 将不再侦听来自 x 的更改。

对于动画,如果您告诉 y 设置不同于 x 的值,则绑定将被破坏。中间动画步骤不会破坏绑定。您可以让 y 仍然绑定到 x,但是随着 x 的变化,y 可以为这些变化设置动画并保持绑定。