QML 类型系统
在 QML 文档中定义对象层次结构时可能用到的类型有多种来源。它们可能是
- 由 QML 语言本地提供
- QML 模块通过 C++ 注册
- 由 QML 模块作为 QML 文档提供
此外,应用程序开发人员可以提供自己的类型,可以直接注册 C++ 类型,也可以在 QML 文档中定义可重用的组件,然后导入这些组件。
无论类型定义来自哪里,引擎都会对这些类型的属性和实例执行类型安全。
QML 对象类型
QML 对象类型是一种可实例化 QML 对象的类型。QML 对象类型源自QtObject ,由 QML 模块提供。应用程序可以导入这些模块,使用它们提供的对象类型。QtQuick 模块提供了在 QML 中创建用户界面所需的最常用对象类型。
最后,每个 QML 文档都隐式定义了一个 QML 对象类型,可以在其他 QML 文档中重复使用。有关对象类型的深入信息,请参阅QML 类型系统中有关对象类型的文档。
QML 值类型
QML 语言内置支持各种原始类型,包括整数、双精度浮点数、字符串和布尔值。对象可以有这些类型的属性,这些类型的值可以作为参数传递给对象的方法。
有关值类型的更多信息,请参阅QML 值类型(Value Types)文档。
QML 序列类型
序列类型可用于存储值或对象的序列。
有关序列类型的深入信息,请参阅QML 类型系统中有关序列类型的文档。
枚举
在 QML 中,枚举被视为类型的特殊属性。
有关枚举的深入信息,请参阅QML枚举文档。
单例类型
QML 支持单例类型(singleton types),它提供了一种定义类型的方法,在每个 QML 引擎中只有一个实例。单例类型对提供应用程序范围的状态或功能很有用。
详情请看Singletons in QML。
附加类型
附加属性(attached properties)和信号处理器(signal handlers)允许类型提供附加到其他对象的额外属性和信号。这是一种强大的机制,可为 QML 对象添加上下文信息。
详情请参阅QML 附加类型(QML Attached Types)。
QML 命名空间
QML 命名空间可用于从 C++ 命名空间公开枚举。
有关命名空间的深入信息,请参阅QML 类型系统中有关命名空间的文档。
JavaScript 类型
QML 引擎支持 JavaScript 对象和数组。任何标准 JavaScript 类型都可使用通用var 类型创建和存储。
例如,可使用标准的Date 和Array 类型,如下所示:
import QtQuick Item { property var theArray: [] property var theDate: new Date() Component.onCompleted: { for (var i = 0; i < 10; i++) theArray.push("Item " + i) console.log("There are", theArray.length, "items in the array") console.log("The time is", theDate.toUTCString()) } }
C++ 集成
QML 和 C++ 之间的数据类型转换
当 QML 与 C++ 集成时,数据经常需要在两个环境之间传输。QML 引擎为常见数据类型提供 QML 和 C++ 类型之间的自动转换,而自定义类型则需要明确注册。
从 C++ 与 QML 对象交互
C++ 代码可通过从 QML 引擎获取 QML 对象的引用来访问和操作 QML 对象。这允许 C++ 代码读写 QML 对象的属性、调用方法和连接信号。
从 C++ 整合 JavaScript 值
QML 引擎使用QJSValue 和相关类来表示 JavaScript 值,使 C++ 代码能与 JavaScript 对象、函数和原始值一起工作。这就实现了 C++ 和 JavaScript 代码之间的无缝集成。
详情请参阅从 C++ 整合 JavaScript 值。
使用上下文属性将 C++ 对象嵌入 QML
应避免使用上下文属性。详情请参阅使用上下文属性将 C++ 对象嵌入 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.