QML对象类型
QML对象类型是一种可以从中实例化QML对象的类型。
在语法上,QML对象类型是一种可以通过指定类型名称后跟一组花括号来声明对象,该花括号包含该对象的属性。这与值类型不同,值类型不能以相同的方式使用。例如,Rectangle是一个QML对象类型:它可以用来创建Rectangle
类型的对象。这不能与原始数据类型(如int
和bool
)一起做,它们用于存储简单数据类型而不是对象。
可以通过创建一个定义类型的.qml文件来定义自定义的QML对象类型,如《在QML对象类型定义中作为文档》所述,或由C++定义QML类型并将其与QML引擎注册,如《从C++定义QML类型》所述。请注意,在这两种情况下,类型名称必须以大写字母开头,才能在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
列表。
请注意,每个 组件 对象声明都会创建自己的 组件范围。在 组件 对象声明内部使用和引用的任何 id 值必须在该范围内是唯一的,但不需要在声明内联组件的文档中是唯一的。因此,在 myComponent
对象声明中声明的 矩形 可以有一个 id 值为 root
,而不会与同文档中声明的 项 对象的 root
冲突,因为这些两个 id 值是在不同的组件范围内声明的。
有关更多详细信息,请参阅 范围和命名解析。
从 C++ 定义对象类型
C++ 插件编写者和应用开发人员可以通过 Qt QML 模块提供的 API 注册 C++ 定义的类型。存在各种注册函数,每个函数都允许满足不同的使用场景。有关这些注册函数的更多信息以及将自定义 C++ 类型公开给 QML 的具体信息,请参阅有关 从 C++ 定义 QML 类型 的文档。
QML 类型系统依赖于将导入、插件和扩展安装到已知的导入路径。插件可以由第三方开发人员提供并由客户端应用开发人员重用。有关创建和部署 QML 扩展模块的更多信息,请参阅有关 QML 模块 的文档。
© 2024 Qt 公司有限公司。本文件中包含的文档贡献归各自所有者所有。本文件提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 及相关商标是芬兰 Qt 公司及其在世界各地的分支机构在全球的商标。所有其他商标均为各自所有者的财产。