文章目录
Binding 概括
属性绑定 可以让不同的对象属性存在绑定关系
绑定一个不可访问的属性
有时,有必要将一个对象的属性绑定到另一个不是由QML直接实例化的对象的属性,例如C++导出到QML的类的属性。您可以使用Binding类型来建立此依赖关系;将任何值绑定到任何对象的属性。
例如,在将“app.enteredText”属性映射到QML的C++应用程序中,可以使用Binding更新enteredText属性。
TextEdit { id: myTextField; text: "Please type here..." }
Binding { target: app; property: "enteredText"; value: myTextField.text }
当文本更改时,C++属性 enteredText 将会自动更新
这里主要用于和 C++的内容进行交互
条件绑定
在某些情况下,您可能希望在满足特定条件时修改属性的值,但在其他情况下保持不变。通常,直接绑定不可能做到这一点,因为您必须为所有可能的分支提供值。
例如,每当您释放鼠标时,下面的代码片段都会导致警告。这是因为未按下鼠标时绑定的值未定义。
// produces warning: "Unable to assign [undefined] to double value"
value: if (mouse.pressed) mouse.mouseX
Binging 可以阻止这个警告
Binding on value {
when: mouse.pressed
value: mouse.mouseX
}
Binding类型恢复属性上以前设置的任何直接绑定。
Property Documentation 属性文档
delayed : bool
此属性决定是否应延迟绑定。
延迟绑定不会立即更新目标,而是等待事件队列被清除。这可以用作优化,或防止分配中间值。
Binding {
target: contactName; property: 'text'
value: givenName + " " + familyName; when: list.ListView.isCurrentItem
delayed: true
}
property : string
要更新的属性
如果要更改的值是 可以被访问的组件属性值 那么可以直接设置组属性
例如下面的例子
Item {
id: item
property rect rectangle: Qt.rect(0, 0, 200, 200)
}
Binding {
target: item
property: "rectangle.x"
value: 100
}
target : Object
将要被改变的对象
value : any
要在目标对象和属性上设置的值。这可以是常量(不是很有用),也可以是绑定表达式。
when : bool
当绑定处于活动状态时,此属性保持不变。当您希望绑定处于活动状态时,应将其设置为计算结果为true的表达式。
当when 里面的内容为true的时候
Binding功能才会生效
Binding {
target: contactName; property: 'text'
value: name; when: list.ListView.isCurrentItem
}
当绑定再次变为非活动状态时,之前在属性上设置的任何直接绑定都将被还原。