QML是一种声明性语言,用于描述对象之间的关系。QtQuick是一个基于QML之上的框架,用于构建应用程序的用户界面。它将用户界面分解成小元素,这些元素也可以组合成组件。QtQuick可以设置这些元素的外观和行为。也可以使用JavaScript代码丰富用户界面,以提供简洁而复杂的逻辑。从这个角度来看,它遵循HTML-JavaScript模式,但是为QML和QtQuick重新设计过,且不是简单文本文档。
// RectangleExample.qml
import QtQuick
// The root element is the Rectangle 根元素是矩形
Rectangle {
// name this element root 将此元素id命名为root
id: root
// properties: <name>: <value> 属性:<名称>:<值>
width: 120; height: 240
// color property 颜色属性
color: "#4A4A4A"
// Declare a nested element (child of root) 声明一个嵌套元素(根的子元素)
Image {
id: triangle
// reference the parent 引用父对象属性
x: (parent.width - width)/2; y: 40
source: 'assets/triangle_red.png'
}
// Another child of root 根的另一个子元素
Text {
// un-named element 无id的元素
// reference element by id 通过id引用元素属性
y: triangle.y + triangle.height + 20
// reference root element 参考根元素属性
width: root.width
color: 'white'
horizontalAlignment: Text.AlignHCenter
text: 'Triangle'
}
}
以上述代码为例子:
(1)import语句导入一个模块。版本号省略,形式为<主版本号>.<次版本号>
(2)每个QML文件都需要有一个根元素,类似HTML
(3)元素先类型声明,后跟{}(rectangle是矩形)
(4)元素有属性,形式是 属性名: 属性值
(5)QML文档中的属性,可以通过它们的id(不带引号)来访问
(6)元素可以嵌套,即父元素可以有子元素。可以使用parent访问父元素属性
ps:
使用import语句,可以按名称导入QML模块。在Qt5中,你必须指定一个主、次版本号(例如2.15),但在Qt6中可以省略的。对于本书的内容,我们省略了版本号,这相当于自动选用Qt开发套件中的最新版本。