QML对象类型#

描述了QML对象类型及其创建方法

QML对象类型是QML对象可以从中实例化的类型。

在句法上,QML对象类型是可以通过指定类型名称后跟一个包含该对象属性的集合大括号来声明对象的一个类型。这不同于值类型,它们不能以相同的方式使用。例如,Rectangle是QML对象类型:它可以用来创建Rectangle类型的对象。这不能与如intbool之类的原始类型一起使用,它们用于存储简单数据类型而不是对象。

可以通过创建定义类型的.qml文件来自定义QML对象类型,如通过QML文档定义对象类型中讨论的那样,也可以通过我们将要在从C++定义QML类型中讨论的方式来定义一个QML类型并将其注册到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文档中内联定义类型,而不是在.qml文件中使用单独的文档。

在此处,myComponent 对象本质上定义了一个匿名类型,可以使用 createObject 来实例化此匿名类型的对象。

内联组件具有常规顶级组件的所有特征,并使用其包含的 QML 文档中相同的 import 列表。

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

有关更多详细信息,请参阅 作用域和命名解析

从 C++ 定义对象类型#

C++ 插件编写者和应用程序开发者可以通过 Qt QML 模块提供的 API 注册在 C++ 中定义的类型。存在各种注册函数,每个函数都允许满足不同的使用场景。有关这些注册函数和将自定义 C++ 类型暴露给 QML 的具体信息,请参阅有关 从 C++ 定义 QML 类型 的文档。

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