Binding QML Type

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
  }

当绑定再次变为非活动状态时,之前在属性上设置的任何直接绑定都将被还原。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值