QML类型说明-Binding

来源:互联网 发布:淘宝上哪些童装外贸店 编辑:程序博客网 时间:2024/06/05 15:27

Binding

 

ImportStatement:   import QtQml 2.2

 

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 {

    when:mouse.pressed

    value:mouse.mouseX

}

Binding组件也能恢复预先直接绑定在属性上的值,从这个角度来说,这个组件就像是一个简化版的State。

下面的代码等效于上面的Binding:

State {

    name:"pressed"

    when:mouse.pressed

   PropertyChanges {

       target: obj

       value: mouse.mouseX

    }

}

如果绑定的目标或属性更改,绑定值会立刻被推送到新目标上。同时查阅Qt QML的文档。

 

PropertyDocumentation

property : string

被更新的属性。

 

target : Object

被更新的目标。

 

value : any

要在目标对象和属性上设置的值,它能是一个常数(不常用),或者绑定的表达式。

 

when : bool

绑定是否被激活,它应该被设置成表达式,用以判断我们是否想激活绑定。

Binding {

    target:contactName; property: 'text'

    value: name;when: list.ListView.isCurrentItem

}

当绑定变成未激活状态,任何使用通常方法绑定在属性上的值将被恢复。
0 0