QML 对象类型

QML 对象类型(object type)是一种可以实例化 QML 对象的类型。

在语法上,QML 对象类型可以用来声明一个对象,方法是指定类型名称,然后是一组包含对象属性的大括号。这与值类型不同,后者不能以同样的方式使用。例如,Rectangle 是 QML 对象类型:它可以用来创建Rectangle 类型的对象。而原始类型(如intbool )则不能这样做,它们用于保存简单的数据类型,而不是对象。

自定义 QML 对象类型可以通过创建定义类型的 .qml 文件来定义,如Documents as QML object type definitions 所述;也可以通过从 C++ 定义 QML 类型,并在 QML 引擎注册该类型,如Defining QML Types from C++ 所述。注意在这两种情况下,类型名必须以大写字母开头,才能在 QML 文件中声明为 QML 对象类型。

有关 C++ 和不同 QML 集成方法的更多信息,请参阅C++ 和 QML 集成概述页面。

从 QML 定义对象类型

通过 QML 文档定义对象类型

插件编写者和应用程序开发者可提供定义为 QML 文档的类型。QML 文档在 QML 导入系统中可见时,定义了一种类型,该类型由文件名减去文件扩展名来标识。

因此,如果存在名为 "MyButton.qml "的 QML 文档,它就提供了 "MyButton "类型的定义,可在 QML 应用程序中使用。

有关如何定义QML 文档和 QML 语言语法的信息,请参阅有关 QML 文档的文档。一旦你熟悉了 QML 语言和如何定义 QML 文档,请参阅文档,了解如何在 QML 文档中定义和使用你自己的可重用 QML 类型

更多信息,请参阅通过 QML 文档定义对象类型

用组件定义匿名类型

在 QML 中创建对象类型的另一种方法是使用Component 类型。这允许在 QML 文档中内联定义类型,而不是使用.qml 文件中的单独文档。

Item {
    id: root
    width: 500; height: 500

    Component {
        id: myComponent
        Rectangle { width: 100; height: 100; color: "red" }
    }

    Component.onCompleted: {
        myComponent.createObject(root)
        myComponent.createObject(root, {"x": 200})
    }
}

myComponent 对象本质上定义了一个匿名类型,可使用Component::createObject 将其实例化,创建匿名类型的对象。

内联组件具有普通顶级组件的所有特性,并使用与其包含的 QML 文档相同的import 列表。

请注意,每个Component 对象声明都会创建自己的组件范围。在Component 对象声明中使用和引用的任何id值在该范围内必须是唯一的,但在声明内联组件的文档中不需要是唯一的。因此,在myComponent 对象声明中声明的Rectangleid可以是root ,而不会与同一文档中为Item 对象声明的root 相冲突,因为这两个id值是在不同的组件作用域中声明的。

详情请参阅 "作用域和命名解析"。

从 C++ 定义对象类型

C++ 插件编写人员和应用程序开发人员可以通过Qt Qml 模块提供的 API 注册 C++ 中定义的类型。注册函数种类繁多,可满足不同的使用情况。有关这些注册函数的更多信息,以及向 QML 公开自定义 C++ 类型的具体细节,请参阅Defining QML Types from C++ 文档。

QML 类型系统依赖于安装到已知导入路径的导入、插件和扩展。插件可由第三方开发者提供,并由客户端应用程序开发者重复使用。有关如何创建和部署QML扩展模块的更多信息,请参阅 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.