Binding
ImportStatement:
Properties
property : string
target : Object
value : any
when : bool
DetailedDescription
绑定到无法访问的属性:
有时候,我们需要绑定一个不是QML直接实例化的组件的属性。一般是一个C++扩展的属性。在这种情况下,一般的绑定不工作,Binding允许我们绑定任何值到任何属性上。
例如,一个C++应用程序影射了一个叫app.enteredText的属性到QML,我们可以用Binding属性来更新app.enteredText,就像下面的例子这样:
TextEdit { id: myTextField; text: "Please typehere..." }
Binding { target: app; property: "enteredText";value: myTextField.text }
当TextEdit被更新,则C++属性也将更新。
根据条件绑定到单分支。
有时候,我们希望当某些条件为真时,属性的值能被控制。而所有其他情况下,我们放弃对属性的控制。这时候,直接完成绑定是不可能的,因为这需要为所有可能的分支提供值。
例如:
// produces warning: "Unable to assign [undefined]to double value"
value: if (mouse.pressed) mouse.mouseX
在上面的例子中,无论什么时候释放鼠标,警告都会发生。因为当鼠标没有被按下时,value没有定义。注意,上面的属性加冒号,就是通常的绑定方法。
与之区别的,是我们使用Binding来处理这种预期,以避免警告。例如下面的代码:
Binding on value {
}
Binding组件也能恢复预先直接绑定在属性上的值,从这个角度来说,这个组件就像是一个简化版的State。
下面的代码等效于上面的Binding:
State {
}
如果绑定的目标或属性更改,绑定值会立刻被推送到新目标上。同时查阅Qt QML的文档。
PropertyDocumentation
property : string
被更新的属性。
target : Object
被更新的目标。
value : any
要在目标对象和属性上设置的值,它能是一个常数(不常用),或者绑定的表达式。
when : bool
绑定是否被激活,它应该被设置成表达式,用以判断我们是否想激活绑定。
Binding {
}
当绑定变成未激活状态,任何使用通常方法绑定在属性上的值将被恢复。