【Qt笔记】Qt在C++中的数据类型
这些类型在QML中可以被使用,C++的标准类型不一定可以使用
基本数据类型
类名 | 作用 |
---|---|
QString | 表示Unicode字符串 |
QByteArray | 表示字节数组,用于存储二进制,类似于二进制版的QString |
QChar | 存储单个Unicode字符 |
qreal | 一种跨平台的浮点类型 |
qint8(16, 32, 64), quint8(16, 32, 64) | 整数类型,有无符号的都有 |
bool, int, double | 老朋友了 |
QVariant | 万金油,啥都能存,但是性能会差一些 |
其中,qreal
和qint32
可以用于QImage
和QPixmap
等图形处理。GUI就是生产力!
😅
数据结构类型
类名 | 作用 |
---|---|
QList | 动态数组,存储同一类型的元素列表 |
QVector | 也是动态数组,与QList相似 |
QMap | 键值对的容器,可以通过键快速查找值 |
QHash | 也是键值对容器,但是用的哈希原理 |
QSet | 无序集合,存储不重复的元素 |
QStringList | 字符串列表,存储字符串用的列表 |
QPair | 两个值的有序对,C++也有捏 |
QStack | 后进先出的堆栈 |
QQueue | 先进先出的队列 |
QLinkedList | 双向列表 |
一些数据结构的不同
¶QList & QVector
QList
和 QVector
都是 Qt 框架中的容器类,用于存储一组元素。它们之间的主要区别在于性能和使用场景:
-
存储方式:
QList
采用链表或动态数组的混合实现,适合存储不同大小的对象。QVector
使用连续的内存块,类似于 C++ 的std::vector
,适合存储相同大小的对象。
-
性能:
QList
在插入和删除操作中表现较好,尤其是在中间位置进行操作时。QVector
在随机访问和末尾插入时性能更佳,因为它使用连续内存。
-
内存使用:
QList
可能会有额外的内存开销,特别是对于小对象。QVector
更高效地使用内存,因为它存储对象在连续的内存空间中。
-
使用场景:
- 如果需要频繁的随机访问,
QVector
是更好的选择。 - 如果需要频繁在中间插入或删除元素,
QList
可能更合适。
- 如果需要频繁的随机访问,
¶QHash & QMap
QHash
和 QMap
都是 Qt 框架中的键值对容器,但它们在实现和使用场景上有一些区别:
-
实现方式:
QHash
使用哈希表实现,键值对的存储顺序是无序的。QMap
使用平衡二叉树实现,键值对按键的顺序存储。
-
性能:
QHash
在平均情况下提供常数时间复杂度的查找、插入和删除操作。QMap
具有对数时间复杂度的查找、插入和删除操作。
-
排序:
QHash
不维护任何顺序,适合不需要排序的场景。QMap
自动按键排序,适合需要按顺序访问元素的场景。
-
使用场景:
- 如果需要快速查找且不关心顺序,
QHash
是更好的选择。 - 如果需要按键顺序访问数据,
QMap
更合适。
- 如果需要快速查找且不关心顺序,
¶QLinkedList & QList
QLinkedList
和 QList
都是 Qt 中的容器类,但它们在实现方式和适用场景上有一些区别:
-
实现方式:
QLinkedList
是一个真正的双向链表,适合频繁插入和删除操作,特别是在列表的中间位置。QList
是一个混合实现,通常更像动态数组,适合随机访问。
-
性能:
QLinkedList
在插入和删除操作时性能较好,但随机访问性能较差(线性时间复杂度)。QList
在随机访问时性能较好(常数时间复杂度),但在中间插入和删除时可能较慢。
-
内存开销:
QLinkedList
每个元素都有额外的指针开销。QList
通常在内存使用上更为高效,因为它使用连续的内存块。
-
使用场景:
QLinkedList
适合需要频繁在列表中间插入或删除元素的场景。QList
适合需要高效随机访问的场景。
总结来说,选择 QLinkedList
或 QList
主要取决于对操作性能和内存效率的具体需求。
【Qt笔记】Qt在C++中的数据类型
https://学习.fun/ml-note/qt-datatype/