QML开发避坑指南(五):QML常用类型

(1)一览
类型 用途 特点
Q_GADGET 定义值类型 Q_OBJECT 宏的轻量版本
QList 值传递列表容器 类似 QVariantList,可读性更好
Q_PROPERTY 定义值类型的属性 暴露属性
(2)类型
(2.1)Q_GADGET

Q_GADGET 宏是 Q_OBJECT 宏的轻量化版本,适用于不继承QObject但仍希望使用QMetaObject提供的一些反射功能的类。
 像 Q_OBJECT 宏一样,它必须出现在类定义的私有部分中。
Q_GADGET 可以有Q_ENUMQ_PROPERTYQ_INVOKABLE,但不能有信号

作者注:Q_GADGET 宏常用于定义QML的值类型,类似于Java的VO

(2.2)QList

QListQLinkedListQVector 提供了类似的 API 和功能。它们通常是可互换的,但也会对性能产生影响。以下是用例概述:

  • QVector 应该是默认的第一选择。QVector 通常会比 QList 提供更好的性能,因为 QVector 总是按顺序将其项存储在内存中,其中 QList 将在堆上分配其项,除非 sizeof(T) <= sizeof(void*),并且 T 已使用 Q_DECLARE_TYPEINFO 声明为 Q_MOVABLE_TYPEQ_PRIMINIVE_TYPE
  • QList 适用于配合 Qt API 使用、用于传递参数和返回值。
  • 如果需要一个真正的链表,请使用 QLinkedList:它可以保证在列表中间进行恒定的时间插入,并对项而不是索引使用迭代器。

作者注:QML中常用的容器除了QStringList就属QList了

(2.3)Q_PROPERTY

Q_PROPERTY 宏用于声明继承 QObject 的类中的属性。属性的行为类似于类数据成员,但它们具有可通过元对象系统访问的附加功能。

Q_PROPERTY(type name READ getter [WRITE setter] [NOTIFY notifySignal])

属性名称(name)和类型(type)以及 READ 函数是必需的。
类型可以是 QVariant 支持的任何类型,也可以是用户定义的类型。
其他项目是可选的,但 WRITE 函数是常见的。

作者注:

  1. 用户自定义类型,需要使用 Q_DECLARE_METATYPE 申明
  2. 是否需要 WRITE 取决于业务逻辑:是否需要前端(qml)传值
  3. 对于信号的触发,建议在 setter 中显式地 emit
相关文档
  1. QML开发避坑指南(一):图像资源的加载
  2. QML开发避坑指南(二):加载https图像
  3. QML开发避坑指南(三):webchannel中js的加载顺序
  4. QML开发避坑指南(四):ImageProvider的使用

你可能感兴趣的:(#,QML,#,开发笔记,#,Qt,QML,QT,笔记)