【Qt笔记】Qt在C++中的数据类型

这些类型在QML中可以被使用,C++的标准类型不一定可以使用

基本数据类型

类名 作用
QString 表示Unicode字符串
QByteArray 表示字节数组,用于存储二进制,类似于二进制版的QString
QChar 存储单个Unicode字符
qreal 一种跨平台的浮点类型
qint8(16, 32, 64), quint8(16, 32, 64) 整数类型,有无符号的都有
bool, int, double 老朋友了
QVariant 万金油,啥都能存,但是性能会差一些

其中,qrealqint32可以用于QImageQPixmap等图形处理。GUI就是生产力!
😅

数据结构类型

类名 作用
QList 动态数组,存储同一类型的元素列表
QVector 也是动态数组,与QList相似
QMap 键值对的容器,可以通过键快速查找值
QHash 也是键值对容器,但是用的哈希原理
QSet 无序集合,存储不重复的元素
QStringList 字符串列表,存储字符串用的列表废话
QPair 两个值的有序对,C++也有捏
QStack 后进先出的堆栈
QQueue 先进先出的队列
QLinkedList 双向列表

一些数据结构的不同

QList & QVector

QListQVector 都是 Qt 框架中的容器类,用于存储一组元素。它们之间的主要区别在于性能和使用场景:

  1. 存储方式:

    • QList 采用链表或动态数组的混合实现,适合存储不同大小的对象。
    • QVector 使用连续的内存块,类似于 C++ 的 std::vector,适合存储相同大小的对象。
  2. 性能:

    • QList 在插入和删除操作中表现较好,尤其是在中间位置进行操作时。
    • QVector 在随机访问和末尾插入时性能更佳,因为它使用连续内存。
  3. 内存使用:

    • QList 可能会有额外的内存开销,特别是对于小对象。
    • QVector 更高效地使用内存,因为它存储对象在连续的内存空间中。
  4. 使用场景:

    • 如果需要频繁的随机访问,QVector 是更好的选择。
    • 如果需要频繁在中间插入或删除元素,QList 可能更合适。

QHash & QMap

QHashQMap 都是 Qt 框架中的键值对容器,但它们在实现和使用场景上有一些区别:

  1. 实现方式:

    • QHash 使用哈希表实现,键值对的存储顺序是无序的。
    • QMap 使用平衡二叉树实现,键值对按键的顺序存储。
  2. 性能:

    • QHash 在平均情况下提供常数时间复杂度的查找、插入和删除操作。
    • QMap 具有对数时间复杂度的查找、插入和删除操作。
  3. 排序:

    • QHash 不维护任何顺序,适合不需要排序的场景。
    • QMap 自动按键排序,适合需要按顺序访问元素的场景。
  4. 使用场景:

    • 如果需要快速查找且不关心顺序,QHash 是更好的选择。
    • 如果需要按键顺序访问数据,QMap 更合适。

QLinkedList & QList

QLinkedListQList 都是 Qt 中的容器类,但它们在实现方式和适用场景上有一些区别:

  1. 实现方式:

    • QLinkedList 是一个真正的双向链表,适合频繁插入和删除操作,特别是在列表的中间位置。
    • QList 是一个混合实现,通常更像动态数组,适合随机访问。
  2. 性能:

    • QLinkedList 在插入和删除操作时性能较好,但随机访问性能较差(线性时间复杂度)。
    • QList 在随机访问时性能较好(常数时间复杂度),但在中间插入和删除时可能较慢。
  3. 内存开销:

    • QLinkedList 每个元素都有额外的指针开销。
    • QList 通常在内存使用上更为高效,因为它使用连续的内存块。
  4. 使用场景:

    • QLinkedList 适合需要频繁在列表中间插入或删除元素的场景。
    • QList 适合需要高效随机访问的场景。

总结来说,选择 QLinkedListQList 主要取决于对操作性能和内存效率的具体需求。


【Qt笔记】Qt在C++中的数据类型
https://学习.fun/ml-note/qt-datatype/
Author
Stephen Zeng
Posted on
November 10, 2024
Licensed under