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