绑定 QML 类型
启用任意属性绑定的创建。 更多...
导入语句 | import QtQml |
属性
详细描述
在 QML 中,属性绑定会导致不同对象的属性之间产生依赖关系。
绑定到不可访问的属性
有时需要将一个对象的属性绑定到 QML 没有直接实例化的另一个对象(比如由 C++ 导出给 QML 的类的属性)上。可以使用绑定类型建立这种依赖关系;将任何值绑定到任何对象的属性上。
例如,在将 "app.enteredText" 属性映射到 QML 的 C++ 应用程序中,可以使用绑定来更新 enteredText 属性。
TextEdit { id: myTextField; text: "Please type here..." } Binding { app.enteredText: myTextField.text }
当 text
发生变化时,C++ 属性 enteredText
将自动更新。
条件绑定
在某些情况下,可能需要在满足特定条件时更改属性的值,否则不修改它。通常,直接绑定无法做到这一点,因为必须为所有可能的分支提供值。
例如,下面的代码片段在释放鼠标时会发出警告。这是因为当鼠标未按住时,绑定的值是未定义的。
// produces warning: "Unable to assign [undefined] to double value" value: if (mouse.pressed) mouse.mouseX
绑定类型可以防止此警告。
Binding on value { when: mouse.pressed value: mouse.mouseX }
绑定类型会恢复属性上之前设置的任何直接绑定。
参见 Qt Qml.
属性文档
delayed : bool |
此属性包含绑定是否应延迟。
延迟绑定不会立即更新目标,而是等待事件队列被清空。这可以用作优化,也可以用于防止分配中间值。
Binding { contactName.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 }
只有当您无法声明式地提供绑定目标时,才需要使用此属性。以下代码片段与上面的绑定等效,但更为紧凑
Binding { item.rectangle.x: 100 }
restoreMode : 枚举 |
此属性可以用来描述绑定禁用时是否以及如何恢复原始值。
可能的值有
常量 | 描述 |
---|---|
Binding.RestoreNone | 根本不恢复原始值 |
Binding.RestoreBinding | 如果原始值是另一个绑定,则恢复原始值。在这种情况下,老绑定再次生效。 |
Binding.RestoreValue | 如果原始值是普通值而不是绑定,则恢复原始值。 |
Binding.RestoreBindingOrValue | 总是恢复原始值。 |
默认值是 Binding.RestoreBindingOrValue
。
注意:此属性存在于与Qt早期版本的向后兼容性中。不要在新代码中使用它。
target : QtObject |
value : var |
要在目标对象和属性上设置的值。这可以是常量(这不怎么有用),或绑定表达式。
只有当您无法声明式地提供绑定目标时,才需要使用此属性。否则,您可以直接绑定到目标。
when : bool |
当绑定活跃时,该属性保持为真。这应设置为一个在您希望绑定活跃时计算为真的表达式。
Binding { contactName.text: name when: list.ListView.isCurrentItem }
默认情况下,当绑定变为不活跃时,会恢复先前设置的任何绑定或值。您可以使用 restoreMode 属性自定义恢复行为。
另请参阅:restoreMode。
© 2024 Qt公司 Ltd。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据由自由软件基金会出版的GNU自由文档许可协议版本1.3许可的。Qt及其 respective 标志是芬兰的Qt公司及其它国家和地区注册的商标。所有其他商标均为各自所有者的财产。