QML- QML Object 对象类型概述

一、概述

QML对象类型区别于基本类型,其可以实例化出QML对象的类型。

从语法角度来看,QML对象类型是一种通过指定类型名称后跟一组包含该对象属性的大括号来声明对象的类型。这与基本类型不同,基本类型不能以相同的方式使用。例如,Rectangle是一个QML对象类型:它可以用来创建Rectangle类型的对象。对于int和bool等用于保存简单数据类型而非对象的基本类型则无法做到这一点。

就像 int{属性值组…} double{属性值组…} 肯定是非法的

举例来说,在 Qt Quick 模块里面就有这些 对象类型,这些对象类型就是我们可以使用的对象。
在这里插入图片描述
在 Qt QML模块里面对象类型又不一样

在这里插入图片描述
当然 Qt 也提供了自定义的功能。

自定义QML对象类型可以通过创建自定义类型的 .qml 文件来定义,如从qml文档中的QML对象类型定义,也可以通过从c++中定义QML类型并向QML引擎注册类型来定义,如从c++中定义QML类型也可以。

  • 注意:在这两种情况下,类型名称必须以大写字母开头,以便在QML文件中声明为QML对象类型。

这里我们就要清楚我们可以在 qml ,c++ 里面可以自己定义扩展对象。

二、从QML定义对象类型

1. 通过QML文档定义对象类型

插件 作者 和 应用程序开发人员 都可以提供定义为QML文档的类型。当QML导入系统可见时,QML文档定义了由文件名减去文件扩展名标识的类型。

因此,如果一个名为“MyButton”的QML文档。它提供了“MyButton”类型的定义,我们引入这个qml 就可以在qml应用程序中的其他位置使用。

有关如何定义QML文档和QML语言语法的信息,请参阅有关QML文档的文档。一旦您熟悉了QML语言和如何定义QML文档,请参阅说明如何在QML文档中定义和使用您自己的可重用QML类型的文档。

更多信息请参见通过QML文档定义对象类型。

2. 用Component定义匿名类型

在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实例化来创建这个匿名类型的对象。
内联组件共享常规顶级组件的所有特征,并使用与包含它们的QML文档相同的导入列表。

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

三、在c++中定义对象类型

c++插件作者和应用程序开发人员可以通过Qt QML模块提供的API 注册 c++ 中定义的类型。有各种各样的注册函数,每个都允许不同的用例被实现。

有关这些注册函数的更多信息,以及将自定义c++类型暴露给QML的细节,请参阅有关从c++中定义QML类型的文档。

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

猜你喜欢

转载自blog.csdn.net/qq_43680827/article/details/129545420
QML