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 资源。对象声明部分定义了实例化文档定义的对象类型时要创建的对象树。
下面是一个简单文档的例子:
import QtQuick 2.0 Rectangle { width: 300 height: 200 color: "blue" }
有关该主题的更多信息,请参阅QML 文档的结构(Structure of a QML Document)。
QML 语言的语法
文档的对象声明(object declaration)部分必须用适当的QML 语法指定一个有效的对象层次结构。对象声明可包括自定义对象属性的指定。对象方法属性可指定为 JavaScript 函数,对象属性属性可指定为属性绑定表达式。
有关有效语法的更多信息,请参阅QML 语法文档,有关该主题的深入信息,请参阅QML 与 JavaScript 集成文档。
通过 QML 文档定义对象类型
正如上一节简述的,文档隐式地定义了 QML 对象类型。QML 的核心原则之一是能够定义并重复使用对象类型。这提高了 QML 代码的可维护性,增加了对象层次声明的可读性,并促进了用户界面定义和逻辑实现之间的分离。
在下面的例子中,客户端开发人员用文件中的文档定义了Button
类型:
// Button.qml import QtQuick Rectangle { width: 100; height: 100 color: "red" MouseArea { anchors.fill: parent onClicked: console.log("Button clicked!") } }
然后就可以在应用程序中使用Button
类型:
有关该主题的深入信息,请参阅有关在文档中定义对象类型的文档。
资源加载和网络透明度
QML 是网络透明的,这一点很重要。应用程序可以从远程路径导入文档,就像从本地路径导入文档一样简单。事实上,任何url
属性都可以分配一个远程或本地 URL,QML 引擎会处理涉及的任何网络通信。
有关导入中网络透明度的更多信息,请参阅Network Transparency(网络透明度)文档。
范围和命名解析
文档中的表达式通常涉及对象或对象的属性,由于可能定义多个对象,不同的对象可能有同名的属性,QML 必须定义一些预定义的符号解析语义。有关该主题的深入信息,请参阅作用域和符号解析页面。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.