QML 对象类型

描述QML对象类型以及如何创建它们

QML对象类型是一种可以从中实例化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文档定义对象类型

使用Component定义匿名类型

在QML中创建对象类型的另一种方法是使用Component类型。这允许在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模块的文档。