QML 是一种多范式语言,可以根据对象的属性以及它们如何关联和响应其他对象的变化来定义对象。 与纯粹的命令式代码相比,属性和行为的变化是通过一系列逐步处理的语句来表达的,QML 的声明式语法将属性和行为的变化直接集成到单个对象的定义中。 在需要复杂的自定义应用程序行为的情况下,这些属性定义可以包含命令式代码。
QML 源代码一般是由引擎通过 QML 文档加载的,QML 文档是 QML 代码的独立文档。 这些可用于定义 QML 对象类型,然后可以在整个应用程序中重复使用。 请注意,类型名称必须以大写字母开头,才能在 QML 文件中声明为 QML 对象类型。
导入声明
一个 QML 文档可能在文件顶部有多个导入。导入可以是以下任何一种:
- 已注册的c++自定义类型的版本化命名空间
- 包含类型定义作为 QML 文档的相对目录
- 一个 JavaScript 文件
JavaScript 文件导入必须在导入时进行限定,以便可以访问它们提供的属性和方法。
各种导入的通用形式如下:
- import Namespace VersionMajor.VersionMinor
- import Namespace VersionMajor.VersionMinor as SingletonTypeIdentifier
- import "directory"
- import "file.js" as ScriptIdentifier
例如:
- import QtQuick 2.0
- import QtQuick.LocalStorage 2.0 as Database
- import "../privateComponents"
- import "somefile.js" as Script
对象声明
在语法上,QML 代码块定义了要创建的 QML 对象树。对象是使用对象声明来定义的,这些声明描述了要创建的对象的类型以及要赋予该对象的属性。每个对象还可以使用嵌套对象声明来声明子对象。
对象声明由其对象类型的名称和一组花括号组成。 然后在这些大括号内声明所有属性和子对象。
子对象
任何对象声明都可以通过嵌套的对象声明来定义子对象。通过这种方式,任何对象声明都隐式地声明了一个可能包含任意数量的子对象的对象树。
例如,下面的 Rectangle 对象声明包括一个 Gradient 对象声明,该声明又包含两个 GradientStop 声明:
import QtQuick 2.0
Rectangle {
width: 100
height: 100
gradient: Gradient {
GradientStop { position: 0.0; color: "yellow" }
GradientStop { position: 1.0; color: "green" }
}
}
当引擎加载这段代码时,它会创建一个以 Rectangle 对象为根的对象树; 这个对象有一个 Gradient 子对象,它又具有两个 GradientStop 子对象。
注释
QML 中注释的语法类似于 JavaScript:
- 单行注释以 // 开始并在行尾结束
- 多行注释以 /* 开始,以 */ 结束
|