QML 对象类型

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

在语法方面,QML 对象类型是一种可用于通过指定类型名称后跟一组包含该对象属性的花括号来声明对象的类型。 例如,Rectangle 是一个 QML 对象类型:它可以用来创建 Rectangle 类型的对象。

自定义 QML 对象类型可以通过创建定义类型的 .qml 文件来定义,或者通过从 C++ 定义 QML 类型并将类型注册到 QML 引擎。请注意,在这两种情况下,类型名称都必须以大写字母开头,才能在 QML 文件中声明为 QML 对象类型。

一、从 QML 定义对象类型

1.1、通过 QML 文档定义对象类型

QML 导入系统可标识QML文档定义的类型。例如,一个名为“MyButton.qml”的 QML 文档存在提供了“MyButton”类型的定义,它可以在 QML 应用程序中使用。

1.2、使用组件定义匿名类型

在 QML 中创建对象类型的另一种方法是使用组件类型。 这允许在 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 实例化该匿名类型以创建此匿名类型的对象。

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

二、从 C++ 定义对象类型

可以通过 Qt QML 模块提供的 API 注册在 C++ 中定义的类型。

QML 类型系统依赖于安装到已知导入路径中的导入、插件和扩展。插件可能由第三方开发人员提供并由客户端应用程序开发人员重复使用。

猜你喜欢

转载自blog.csdn.net/kenfan1647/article/details/121319004