绑定 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
}

注意:使用延迟属性会产生运行时成本,因为绑定元素必须为值创建一个代理,以便它可以在实际目标上延迟其应用。当使用 targetproperty 属性时,此成本较低,因为 value 属性可以作为代理重用。当使用上述形式时,绑定将为代理分配一个具有动态元对象的独立对象。


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

要更新的对象。您需要使用此属性,如果绑定目标没有 id 属性(例如,当目标是单例时)。

Binding { contactName.text: name }
Binding {
    target: contactName
    property: "text"
    value: name
}

前者更为紧凑,但不能在运行时替换目标对象或属性。后者则可以。


value : var

要在目标对象和属性上设置的值。这可以是常量(这不怎么有用),或绑定表达式。

只有当您无法声明式地提供绑定目标时,才需要使用此属性。否则,您可以直接绑定到目标。


when : bool

当绑定活跃时,该属性保持为真。这应设置为一个在您希望绑定活跃时计算为真的表达式。

Binding {
    contactName.text: name
    when: list.ListView.isCurrentItem
}

默认情况下,当绑定变为不活跃时,会恢复先前设置的任何绑定或值。您可以使用 restoreMode 属性自定义恢复行为。

另请参阅:restoreMode


© 2024 Qt公司 Ltd。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据由自由软件基金会出版的GNU自由文档许可协议版本1.3许可的。Qt及其 respective 标志是芬兰的Qt公司及其它国家和地区注册的商标。所有其他商标均为各自所有者的财产。