QML语言语法十分简洁,可读性很高,用于快速开发Qt程序的UI部分。QML语言语法有些类似于Json语言,同时QML语言还包含了JavaScript语言,JavaScript语言用于描述一个对象的行为。
每一个QML文档包含两个部分:import部分及对象声明部分
一、import语句
import语句位于文档的最开始,它告诉QML引擎,当前文档使用哪些模块,javaScript资源以及组件目录。因此import分为以下三种类型:
1、模块import
模块import的通用语法如下所示:
import <ModuleIdentifier> [<Version.Number>] [as <Qualifier>]
<ModuleIdentifier> 是模块的标识符。
<Version.Number>模块有可能定义了多个版本的对象类型及javascript资源,版本编号用于指定引入的具体是哪一个版本的类型及资源。版本编号是可选的,如果没有指定,引擎会默认加载最新版本类型及资源
<Qualifier>是局部命名空间标识符,这个标识符用于指定将引入的类型及资源放入哪一个命名空间内。如果未指定,则引入的类型及资源会默认放于全局命名空间中
一个常见的模块引入的例子如下所示:
import QtQuick 2.10 as Quick
2、目录import
目录import语句可以使QML文档使用指定目录中包含的QML文档定义的对象类型。它的通用语法如下所示:
import "<DirectoryPath>" [as <Qualifier>]
<DirectoryPath>是本地文件目录,可以是绝对路径或者相对路径。
<Qualifier>与模块imports类似,是可选的。
如果指定的本地目录中包含qmldir文件,则QML文档可以访问qmldir文件中包含的类型。否则引擎会根据指定目录中包含的.qml文件推断可访问的对象类型。(这里提到的qmldir和模块定义中的qmldir不同。可参见 directory imports)
3、javaScript资源import
javaScript资源import,是QML文档可以访问javaScript资源中定义的javaScript函数对象。它的通用语法如下所示:
import "<JavaScriptFile>" as <Identifier>
二、对象声明
一个完整的对象声明,指定了对象的基础类型,为已有属性赋值,指定了对象的自定义属性,以及指定了对象包含的所有子对象。
一个复杂的对象声明往往包含多个子对象,每个子对象内部可能又包含其他子对象。因此,这些对象以及子对象形成了一个层级关系,这个层级关系也构成了一个对象树。一个对象声明的例子如下所示:
import QtQuick 2.0
Rectangle {
width: 100
height: 100
gradient: Gradient {
GradientStop { position: 0.0; color: "yellow" }
GradientStop { position: 1.0; color: "green" }
}
}
三、QML语言的批注
QML语言的批注语法与C++语言类似
单行批注以"//"开头
多行批注以"/*"开始,以“*/”结束
以下是一个包含批注的代码示例:
Text {
text: "Hello world!" //a basic greeting
/*
We want this text to stand out from the rest so
we give it a large size and different font.
*/
font.family: "Helvetica"
font.pointSize: 24
}