分配给已经在 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);
请注意,我不是在问这个 是否在你的系统上工作 - 相反我想知道这段代码是否应该按预期工作。
我的意图是:
- “直接指定”值(x=100 和 y=x)是默认值,
- 无论何时分配它们,它们的值都会被分配的值替换
我目前对文档的理解是:
- 有多个条件绑定是可以的(只要两个条件不能同时为真?)- 在条件不再为真后绑定恢复以前的值(不一定是默认值);
- animation/behavior/transition在running/active时覆盖绑定,但完成后不恢复以前的值(?);
- 其他一切都不清楚(但显然有效;如果分配了多个绑定,那么显然第一个提供了值)
一个问题包含了很多问题。我将专注于您陈述的意图:
"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
可以为这些变化设置动画并保持绑定。
假设 属性 '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);
请注意,我不是在问这个 是否在你的系统上工作 - 相反我想知道这段代码是否应该按预期工作。
我的意图是:
- “直接指定”值(x=100 和 y=x)是默认值,
- 无论何时分配它们,它们的值都会被分配的值替换
我目前对文档的理解是:
- 有多个条件绑定是可以的(只要两个条件不能同时为真?)- 在条件不再为真后绑定恢复以前的值(不一定是默认值);
- animation/behavior/transition在running/active时覆盖绑定,但完成后不恢复以前的值(?);
- 其他一切都不清楚(但显然有效;如果分配了多个绑定,那么显然第一个提供了值)
一个问题包含了很多问题。我将专注于您陈述的意图:
"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
可以为这些变化设置动画并保持绑定。