QML通过元素名声明元素,通过元素属性或自定义属性来定义元素。一个属性是一个简单的键值对,例如,width: 100, text: 'Greetings', color: '#FF0000'。属性具有确定类型,且可以有初始值。
Text {
// (1) identifier 标识符
id: thisLabel
// (2) set x- and y-position 设置x和y坐标
x: 24; y: 16
// (3) bind height to 2 * width 将高度绑定为宽度的2倍
height: 2 * width
// (4) custom property 自定义属性
property int times: 24
// (5) property alias 属性别名
property alias anotherTimes: thisLabel.times
// (6) set text appended by value 设置附加值的文本
text: "Greetings " + times
// (7) font is a grouped property 字体是一个分组属性
font.family: "Ubuntu"
font.pixelSize: 24
// (8) KeyNavigation is an attached property KeyNavigation是一个附加属性
KeyNavigation.tab: otherLabel
// (9) signal handler for property changes 属性更改的信号处理器
onHeightChanged: console.log('height:', height)
// focus is need to receive key events 焦点是获取键盘事件前提
focus: true
// change color based on focus value 根据焦点值改变颜色
color: focus ? "red" : "black"
}
以上述代码为例,
(1)id是一个非常特殊的属性,用于引用QML文件(在QML中称为document)中的元素。id不是字符串类型,而是一个标识符,是QML语法的一部分。id在同一文件中必须是唯一的,不能重置值,也不能查询。(它很像c++中的引用。)
(2)一个属性可以根据类型设置一个值。如果属性没有给定值,那么将会赋予一个初始值。您需要查阅特定元素的文档,以获得关于属性初始值的更多信息。
(3) 一个属性可以依赖于一个或多个其他属性。这被称为绑定。当关联属性发生变化时,绑定属性将被更新。它就像一个契约,例如,高度总是宽度的两倍。
(4)可以给元素添加新属性,需要属性限定符、类型、名称和可选的初始值(property
<类型> <名称> : <初始值>)。如果没有给初始值,则会使用默认的初始值。(可以使用default将一个属性声明为默认属性)
(5)声明属性的另一种重要方法是,使用alias关键字(property alias <别名>: <引用对象>)。alias关键字允许我们将对象的属性或对象本身,从类型内部暴露出来。通过这种方法,可以把组件内部属性或元素id导出到根级属性,稍后内容会具体命题组。属性别名不需要类型,它使用被引用的属性或对象的类型。
(6)有些属性是分组属性。当一个属性更结构化并相关的属性应该组合在一起时,就会使用这个特性。这个分组属性的另一种写法是font {family: "Ubuntu";pixelSize: 24}。
(7)有些属性属于元素类型本身。这是为元素设置的全局属性,在应用程序只出现一次(如键盘输入)。格式为<元素类型>.<属性>: <值>
(8)对于每个属性,都可以提供一个信号处理器。信号处理器在属性更改后被调用。例如,在这里,我们想在高度发生变化时得到通知,并使用内置控制台向系统打印一条消息。