|
9 | 9 | ## 🔢 总体进度 |
10 | 10 |
|
11 | 11 | ``` |
12 | | -入门层 ███░░░░░░░░ 3 / 预估 130 篇 |
| 12 | +入门层 ██░░░░░░░░░ 23 / 预估 130 篇 |
13 | 13 | 进阶层 ░░░░░░░░░░ 0 / 预估 130 篇 |
14 | 14 | 专家层 ░░░░░░░░░░ 0 / 预估 145 篇(含专属章节) |
15 | | -合计 ░░░░░░░░░░ 3 / 预估 405 篇 |
| 15 | +合计 ░░░░░░░░░░ 23 / 预估 405 篇 |
16 | 16 | ``` |
17 | 17 |
|
18 | 18 | --- |
|
26 | 26 |
|
27 | 27 | <details> |
28 | 28 | <summary><strong>01 · QtBase</strong>(16 篇)</summary> |
29 | | - |
30 | | -- [ ] 🔴 `01-qobject-meta-system-beginner.md` — QObject 与元对象系统初识 |
31 | | - - QObject 是什么,为什么几乎所有 Qt 类都继承它 |
32 | | - - Q_OBJECT 宏的作用与必须加的场景 |
33 | | - - 对象树(parent-child)内存管理基础 |
34 | | - - `qobject_cast` 与 `dynamic_cast` 的区别 |
35 | | - |
36 | | -- [ ] 🔴 `02-signal-slot-beginner.md` — Signal / Slot 基础用法与新式语法 |
37 | | - - `signals:` / `slots:` 声明方式 |
38 | | - - `connect()` 四种写法对比(宏 / 函数指针 / Lambda / PMF) |
39 | | - - 同步连接与异步连接的区别(Qt::DirectConnection vs Qt::QueuedConnection) |
40 | | - - `disconnect()` 与连接生命周期管理 |
41 | | - |
42 | | -- [ ] 🔴 `03-qstring-encoding-beginner.md` — QString、QByteArray、字符串操作入门 |
43 | | - - `QString` 与 `std::string` 的本质区别(UTF-16 内部编码) |
44 | | - - 常用操作:`split` / `contains` / `replace` / `arg` / `number` |
45 | | - - `QByteArray` 的适用场景(网络/二进制数据) |
46 | | - - `QString::fromUtf8` / `toUtf8` 编码转换基础 |
47 | | - |
48 | | -- [ ] 🔴 `04-containers-beginner.md` — QList、QMap、QHash、QSet 基础用法 |
49 | | - - `QList<T>` 替代 `QVector` 的 Qt6 变化 |
50 | | - - `QMap` vs `QHash`:有序 vs 哈希,使用场景判断 |
51 | | - - 容器遍历:range-for / `QMapIterator` / `begin-end` |
52 | | - - 隐式共享(写时复制)概念初识 |
53 | | - |
54 | | -- [ ] 🟡 `05-qvariant-metatype-beginner.md` — QVariant 与类型系统基础 |
55 | | - - `QVariant` 是什么,解决了什么问题 |
56 | | - - 常用类型存取:`setValue` / `value<T>` / `canConvert` |
57 | | - - `QMetaType::fromType<T>()` 基础用法 |
58 | | - - 在 Model/View 中传递数据时为何常用 QVariant |
59 | | - |
60 | | -- [ ] 🔴 `06-memory-management-beginner.md` — Qt 内存管理与对象树基础 |
61 | | - - 对象树所有权:parent 负责释放 child |
62 | | - - `QScopedPointer` 与 `std::unique_ptr` 对比 |
63 | | - - `QSharedPointer` 基础用法 |
64 | | - - 何时用 Qt 对象树,何时用智能指针 |
65 | | - |
66 | | -- [ ] 🔴 `07-event-system-beginner.md` — Qt 事件系统与事件循环初识 |
67 | | - - 事件(Event)vs 信号槽(Signal/Slot)的根本区别 |
68 | | - - `QCoreApplication::exec()` 启动的事件循环是什么 |
69 | | - - 重写 `event()` 与具体事件处理函数(如 `mousePressEvent`) |
70 | | - - `QEvent::accept()` / `ignore()` 控制事件传播 |
71 | | - |
72 | | -- [ ] 🔴 `08-file-io-beginner.md` — QFile、QDir、QTextStream 文件读写 |
73 | | - - `QFile::open` 标志位(ReadOnly / WriteOnly / Append / Text) |
74 | | - - `QTextStream` 按行读写文本文件 |
75 | | - - `QDir` 遍历目录、过滤文件、创建/删除目录 |
76 | | - - `QFileInfo` 获取文件元信息(大小、修改时间、权限) |
77 | | - |
78 | | -- [ ] 🔴 `09-qthread-beginner.md` — QThread 与线程安全基础 |
79 | | - - 为什么 Qt GUI 必须在主线程操作 |
80 | | - - `QThread` 两种用法:继承 run() vs moveToThread() |
81 | | - - 跨线程信号槽(Qt::QueuedConnection 自动保证线程安全) |
82 | | - - `QMutex` / `QMutexLocker` 基础保护共享数据 |
83 | | - |
84 | | -- [ ] 🟡 `10-qprocess-beginner.md` — QProcess 启动外部程序基础 |
85 | | - - `QProcess::start()` 与 `startDetached()` 区别 |
86 | | - - 读取 `stdout` / `stderr` 输出 |
87 | | - - `waitForFinished()` 同步等待与异步信号接收 |
88 | | - - 环境变量设置与工作目录配置 |
89 | | - |
90 | | -- [ ] 🔴 `11-qtimer-beginner.md` — QTimer 定时器基础用法 |
91 | | - - 单次定时器(`singleShot`)与重复定时器 |
92 | | - - `QTimer::singleShot` 静态方法快速使用 |
93 | | - - 定时器在线程中的注意事项(必须属于该线程) |
94 | | - - `QElapsedTimer` 计时测量 |
95 | | - |
96 | | -- [ ] 🟡 `12-plugin-system-beginner.md` — QPluginLoader 插件系统初识 |
97 | | - - 插件系统解决了什么问题(动态扩展能力) |
98 | | - - `Q_DECLARE_INTERFACE` / `Q_PLUGIN_METADATA` 宏的作用 |
99 | | - - `QPluginLoader::load()` 加载与 `instance()` 获取接口 |
100 | | - - 插件的 CMakeLists.txt 配置(`MODULE` 类型) |
101 | | - |
102 | | -- [ ] 🟡 `13-i18n-beginner.md` — 国际化 tr() 与翻译流程基础 |
103 | | - - `tr()` 的正确使用范围与注意事项 |
104 | | - - `lupdate` 提取字符串 → Qt Linguist 翻译 → `lrelease` 编译 `.qm` |
105 | | - - `QTranslator::load()` 加载翻译文件 |
106 | | - - 复数形式处理 `tr("%n item(s)", "", count)` |
107 | | - |
108 | | -- [ ] 🟡 `14-logging-beginner.md` — qDebug / qWarning / QLoggingCategory 日志基础 |
109 | | - - `qDebug` / `qInfo` / `qWarning` / `qCritical` / `qFatal` 五级日志 |
110 | | - - `QLoggingCategory` 按模块过滤日志 |
111 | | - - `QT_LOGGING_RULES` 环境变量动态过滤 |
112 | | - - Release 构建禁用 qDebug 输出的方法 |
113 | | - |
114 | | -- [ ] 🟡 `15-regex-beginner.md` — QRegularExpression 正则表达式基础 |
115 | | - - `QRegularExpression` vs 已废弃的 `QRegExp` |
116 | | - - 常用模式:匹配、捕获组、全局搜索 |
117 | | - - `QRegularExpressionMatch` 提取捕获结果 |
118 | | - - 在 `QLineEdit` 中设置输入验证正则 |
119 | | - |
120 | | -- [ ] 🟡 `16-json-xml-beginner.md` — QJsonDocument 与 QXmlStreamReader 解析基础 |
121 | | - - `QJsonDocument::fromJson()` 解析 JSON 字符串 |
122 | | - - `QJsonObject` / `QJsonArray` 取值 |
123 | | - - `QXmlStreamReader` 流式解析 XML 的读取循环 |
124 | | - - JSON 序列化写入文件完整示例 |
125 | | - |
| 29 | +全部完成 |
126 | 30 | </details> |
127 | 31 |
|
128 | 32 | <details> |
|
1797 | 1701 |
|
1798 | 1702 | | 层级 | 总篇数 | 已完成 | 进行中 | 未开始 | |
1799 | 1703 | |------|--------|--------|--------|--------| |
1800 | | -| 入门 | 130 | 0 | 0 | 130 | |
| 1704 | +| 入门 | 130 | 16 | 0 | 114 | |
1801 | 1705 | | 进阶 | 130 | 0 | 0 | 130 | |
1802 | 1706 | | 专家 | 145 | 0 | 0 | 145 | |
1803 | | -| **合计** | **405** | **0** | **0** | **405** | |
| 1707 | +| **合计** | **405** | **16** | **0** | **389** | |
1804 | 1708 |
|
1805 | 1709 | --- |
1806 | 1710 |
|
|
0 commit comments