属性绑定:指定一个属性的值的声明表示方法。通过绑定可以使用一个JavaScript表达式来作为属性的值,其中可以使用其他属性的值,也可以使用在应用程序中可以获取的其他的值。如果其他属性或者数据的值更改了,这个属性的值会自动更新。每当一个属性分配了一个JavaScript表达式时,便会隐含的使用属性绑定。
QML扩展了标准的JavaScript引擎,所以任何可用的JavaScript表达式都可以用作属性绑定。在绑定中可以访问对象属性,调用函数,甚至可以使Date和Math等内建的JavaScript对象。向一个属性分配一个常量表达式。
从语法上讲,绑定是可以无限复杂的。但,如果一个绑定变得非常复杂,例如涉及多行或者使用了循环,那么最好是额可以重新来编写这个组件,或者是将绑定的内容卸载一个单独的函数中。
1. 更改绑定
PropertyChanges元素可以用在一个状态改变中来修改属性的绑定。
Rectangle {
id: rectangle
width: otherItem.width
height: otherItem.height
states: State {
name: "square"
PropertyChanges {
target: rectangle
width: otherItem.height
}
}
}
2. 使用JavaScript进行属性分配的影响
使用JavaScript 代码来为一个属性分配值,不会产生属性绑定。
Rectangle {
Component {
width = otherItem.width
}
}
下面Rectangle的width属性会为13,而忽略了otherItem的width
Rectangle {
width: otherItem.width
Component {
width = 13; //给已经进行了绑定的属性进行赋值,那么会移除绑定
}
}
3. 绑定元素
前面介绍的隐式绑定语法是易于使用的,而且大多数的绑定都可以完美的工作。在一些高级的情况下,必须明确的使用绑定元素来创建一个绑定。要将一个从C++中暴露的属性(system.brightness)绑定到一个来自QML的值(slider.value),就需要使用到绑定元素:
Binding {
target: system
property: "brightness"
value: slider.value
}