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



假设属性'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

if "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);

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

我的意图是:

  • "直接specified"值(x=100和y=x)是默认的,
  • 无论何时赋值,它们的值都会被赋值的值所替换

我目前对文档的理解是:

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

一个问题里包含了很多问题。我将把重点放在你陈述的意图上:

  • "直接specified"值(x=100和y=x)是默认值,

  • 无论何时赋值,它们的值都会被赋值的值所替换

如果你有绑定,像这样:

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可以动画这些变化,并保持绑定。

最新更新