QML文档是符合QML文档语法的字符串。文档定义了QML对象类型。通常从".qml"本地或远程存储的文件加载文档,但是可以用代码手动构建。由文档定义的对象类型的实例可以使用QML代码中的Component或C ++中的QQmlComponent来创建。或者,如果对象类型通过特定的类型名称显式地公开给QML类型系统,则可以在其他文档的对象声明中直接使用该类型。
在文档中定义可重用的QML对象类型的能力是使客户端能够编写模块化,高度可读且可维护的代码的重要推动力。
从Qt 5.4开始,文档也可以具有文件扩展名".ui.qml"。QML引擎处理这些文件,例如标准.qml文件,并且忽略.ui扩展名的一部分。Qt Creator将这些文件作为Qt快速设计器的UI表单进行处理。这些文件只能包含Qt Creator定义的QML语言的子集。
QML文件的结构
QML文档包括两个部分:导入部分和对象声明部分。文档中的imports部分包含import语句,这些语句定义了文档可以使用的QML对象类型和JavaScript资源。对象声明部分定义了实例化文档定义的对象类型时要创建的对象树。
一个简单文档的示例如下:
<code>import
QtQuick
2.0Rectangle
{width
:300
height:200
color:"blue"
}/<code>
QML语言的语法
文档的对象声明部分必须使用适当的QML语法指定有效的对象层次结构。对象声明可以包括自定义对象属性的规范。可以将对象方法属性指定为JavaScript函数,并且可以为对象属性属性分配属性绑定表达式。
请参阅有关QML语法的文档,以获取有关有效语法的更多信息,并请参阅有关集成QML和JavaScript的文档,以获取有关该主题的深入信息。
通过QML文档定义对象类型
如上一节中简要描述的,文档隐式定义了QML对象类型。QML的核心原则之一是能够定义然后再使用对象类型。这提高了QML代码的可维护性,提高了对象层次结构声明的可读性,并促进了UI定义和逻辑实现之间的分离。
在下面的示例中,客户端开发人员定义了Button类型:
<code>//
Button.qml
import
QtQuick
2.0
Rectangle
{
width:
100
;
height:
100
color:
"red"
MouseArea
{
anchors.fill:
parent
onClicked:
console.log("Button
clicked!")
}}
在应用中就可以使用这个Button:
//
application.qmlimport
QtQuick
2.0
Column
{
Button
{
width:
50
;
height:
50
}
Button
{
x:
50
;
width:
100
;
height:
50
;
color:
"blue"
}
Button
{
width:
50
;
height:
50
;
radius:
8
}}
/<code>
请参阅有关在文档中定义对象类型的文档,以获取有关该主题的深入信息。
资源加载和网络透明度
重要的是要注意,QML是网络透明的。应用程序可以从远程路径导入文档,就像从本地路径导入文档一样简单。实际上,url可以为任何属性分配远程或本地URL,并且QML引擎将处理涉及的任何网络通信。
请参阅后续网络透明性文档以获取有关导入中网络透明性的更多信息。
范围和命名分辨率
文档中的表达式通常涉及对象或对象的属性,并且由于可以定义多个对象,并且由于不同的对象可能具有名称相同的属性,因此必须由QML定义一些预定义的符号解析语义。请参阅后续有关范围和符号解析的页面,以获取有关该主题的深入信息。