本页内容

QML 对象类型

QML 对象类型是一种可用于实例化 QML 对象的类型。

从语法上讲,QML 对象类型是指可以通过指定类型名,后跟一组包含该对象属性的大括号来声明对象的类型。这与值类型不同,值类型无法以同样的方式使用。 例如,Rectangle 是一个 QML 对象类型:它可用于创建Rectangle 类型的对象。而像int 和bool 这样的基本类型则无法做到这一点,因为它们用于存储简单数据类型,而非对象。

自定义 QML 对象类型可以通过创建一个定义该类型的 .qml 文件来定义,具体方法参见“作为 QML 对象类型定义的文档”;或者通过从 C++ 定义 QML 类型并将其注册到 QML 引擎中,具体方法参见“从 C++ 定义 QML 类型”。 请注意,无论采用哪种方式,类型名称都必须以大写字母开头,才能在 QML 文件中作为 QML 对象类型进行声明。

有关 C++ 以及各种 QML 集成方法的更多信息,请参阅“C++ 与 QML 集成概述”页面。

有两种内置对象类型无需导入任何其他模块即可使用:QtObject 是所有对象类型的基类。Component 可用于在QML文档中内联定义新的对象类型。

通过 QML 定义对象类型

通过 QML 文档定义对象类型

插件作者和应用程序开发人员可以提供以 QML 文档形式定义的类型。当 QML 导入系统能够识别某个 QML 文档时,该文档定义的类型由文件名(不包含文件扩展名)标识。

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

有关如何定义 QML文档以及 QML 语言语法的信息,请参阅QML 文档相关文档。在熟悉 QML 语言和 QML 文档的定义方法后,请参阅说明如何在 QML 文档中定义和使用自定义可重用 QML 类型的文档。

有关更多信息,请参阅《通过 QML 文档定义对象类型》。

使用 Component 定义匿名类型

在 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 对象声明中声明的Rectangle 可以具有id值为root ,而不会与同一文档中为Item 对象声明的root 发生冲突,因为这两个id值是在不同的组件作用域内声明的。

更多详细信息请参阅“作用域与命名解析”。

从 C++ 定义对象类型

C++ 插件作者和应用程序开发人员可以通过Qt Qml 模块提供的 API,注册在 C++ 中定义的类型。有多种注册函数,每种函数都能满足不同的使用场景。有关这些注册函数的更多信息,以及将自定义 C++ 类型暴露给 QML 的具体细节,请参阅关于“从 C++ 定义 QML 类型”的文档。

QML 类型系统依赖于安装在已知导入路径中的导入项、插件和扩展。插件可由第三方开发者提供,并被客户端应用程序开发者重复使用。有关如何创建和部署 QML 扩展模块的更多信息,请参阅关于QML 模块的文档。

© 2026 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.