QML文档

A QML文档是一个符合QML文档语法的字符串。文档定义了一个QML对象类型。文档通常从本地或远程存储的".qml"文件加载,但也可以在代码中手动构建。可以使用QML代码中的组件或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文档结构

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引擎将处理任何相关的网络通信。

有关导入的网络透明度的更多信息,请参阅网络透明度文档。

作用域和命名解析

文档中的表达式通常涉及对象或对象的属性,由于定义了多个对象,不同对象可能具有相同名称的属性,Therefore,QML必须定义一些预定义的符号解析语义。有关主题的详细信息,请参阅作用域和符号解析页面。

© 2024 Qt公司。本文档中包含的文档贡献属于其各自的版权所有者。本文档是根据由自由软件基金会发布的GNU自由文档许可证版本1.3的条款授予的。Qt及其相关标识是芬兰和/或其他国家的Qt公司商标。所有其他商标均为其各自所有者的财产。