1

假设属性“x”在 QML 中有一个即时值,另一个属性“y”绑定到“x”

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

为任何属性分配另一个值是否合法?即绑定'y:x'只是被删除/覆盖,还是进入某种不受支持/错误的状态?

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

如果指定了“何时”,它会有所不同吗?我可以指定多个条件绑定吗?

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)是默认值,
  • 每当分配它们时,它们的值都会被分配的值替换

我目前对文档的理解是:

  • 有多个条件绑定是可以的(只要两个条件不能同时为真?) - 在条件不再为真后,绑定恢复以前的值(不一定是默认值);
  • 动画/行为/过渡在运行/活动时覆盖绑定,但在完成后不恢复先前的值(?);
  • 其他一切都不清楚(但显然有效;如果分配了多个绑定,那么显然第一个提供了值)
4

1 回答 1

3

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

  • “直接指定”值(x=100 和 y=x)是默认值,

  • 每当分配它们时,它们的值都会被分配的值替换

如果你有一个绑定,像这样:

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

And you later change the value of x, under the hood it should be emitting an xChanged signal. The binding means y will be listening for that signal and update accordingly.

Now if you later change y, like so:

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

The binding is broken. y will no longer listen for changes from x.

For animations, if you tell y to animate to a value different from x, then the binding is broken. Intermediate animation steps do not break the binding though. You can have y still bound to x, but as x changes, y can animate those changes and remain bound.

于 2021-01-21T17:58:33.170 回答