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

5 篇文章 0 订阅
4 篇文章 1 订阅
(1)一览
类型用途特点
Q_GADGET定义值类型Q_OBJECT 宏的轻量版本
QList<T>值传递列表容器类似 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

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

  • QVector 应该是默认的第一选择。QVector<T> 通常会比 QList<T> 提供更好的性能,因为 QVector<T> 总是按顺序将其项存储在内存中,其中 QList<T> 将在堆上分配其项,除非 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 <signal>
相关文档
  1. QML开发避坑指南(一):图像资源的加载
  2. QML开发避坑指南(二):加载https图像
  3. QML开发避坑指南(三):webchannel中js的加载顺序
  4. QML开发避坑指南(四):ImageProvider的使用
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值