453 字
1 分钟
【QT】核心类型与容器
2026-06-11

Qt Core 是所有模块的公共基础:事件循环、字符串、容器、文件 I/O、线程、元对象系统等。

QObject#

所有 Qt 对象的基类。类继承链上任意一层为 QObject 时,可使用信号与槽、父子对象树、事件系统等特性。

  • 父子关系:子对象析构时由父对象负责释放;delete parent 会级联删除子对象。
  • 对象树:便于管理窗口、布局中的控件生命周期。

QString 与 QChar#

QString 存储 Unicode 字符串,无 QObject 父类。

  • 每个字符为 QChar,内部常用 UTF-16 编码(每码元 2 字节)。
  • std::string 互转:QString::fromStdString()toStdString()
  • 字面量:QString s = u"你好"_qs;(Qt6)或 QStringLiteral("hello")

常用操作:appendsplitarg 占位格式化、trimmedisEmpty

顺序容器#

说明
QList<T>通用动态数组,Qt6 中 QVector 为其别名
QStack<T>
QQueue<T>队列

Qt6:QVectorQList 统一为同一实现(基于连续存储的数组机制)。

关联容器#

说明
QSet<T>无序唯一集合
QMap<Key, T>有序键值对(按键排序)
QMultiMap<Key, T>一键多值
QHash<Key, T>哈希表,平均 O(1)
QMultiHash<Key, T>哈希,一键多值

容器遍历#

STL 风格迭代器#

每个容器提供 const_iterator(只读)与 iterator(可写)。

  • begin() / constBegin():首元素
  • end() / constEnd():尾后位置(不指向有效元素,仅作循环结束判断)

顺序容器示例

QList<QString> list{"a", "b", "c", "d"};
for (QList<QString>::const_iterator i = list.constBegin();
i != list.constEnd(); ++i)
qDebug() << *i;

关联容器示例(键值对用 key() / value()):

QMap<int, int> map;
for (QMap<int, int>::const_iterator i = map.constBegin();
i != map.constEnd(); ++i)
qDebug() << i.key() << ':' << i.value();

范围 for(C++11,推荐)#

for (const QString &s : list)
qDebug() << s;
for (auto it = map.constBegin(); it != map.constEnd(); ++it)
qDebug() << it.key() << it.value();

foreach 宏(Qt5 风格,Qt6 仍可用)#

定义于 <QtGlobal>

QList<QString> list;
foreach (const QString &str, list)
qDebug() << str;

支持代码块与 break。多值映射可嵌套 foreach

其他常用 Core 类型#

类型用途
QByteArray原始字节序列
QVariant类型擦除的通用值
QDateTime / QDate / QTime日期时间
QFile / QDir文件与目录
QSettings配置持久化(注册表/ini)
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【QT】核心类型与容器
https://lysj.work/posts/studynotes/qt/qt核心类型与容器/
作者
Sekiro
发布于
2026-06-11
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录