Skip to content

Commit 7151459

Browse files
qtbase-beginner
1 parent 4eed1d5 commit 7151459

70 files changed

Lines changed: 12427 additions & 120 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

TODO.md

Lines changed: 5 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
## 🔢 总体进度
1010

1111
```
12-
入门层 ██░░░░░░░░ 3 / 预估 130 篇
12+
入门层 ██░░░░░░░░░ 23 / 预估 130 篇
1313
进阶层 ░░░░░░░░░░ 0 / 预估 130 篇
1414
专家层 ░░░░░░░░░░ 0 / 预估 145 篇(含专属章节)
15-
合计 ░░░░░░░░░░ 3 / 预估 405 篇
15+
合计 ░░░░░░░░░░ 23 / 预估 405 篇
1616
```
1717

1818
---
@@ -26,103 +26,7 @@
2626

2727
<details>
2828
<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+
全部完成
12630
</details>
12731

12832
<details>
@@ -1797,10 +1701,10 @@
17971701

17981702
| 层级 | 总篇数 | 已完成 | 进行中 | 未开始 |
17991703
|------|--------|--------|--------|--------|
1800-
| 入门 | 130 | 0 | 0 | 130 |
1704+
| 入门 | 130 | 16 | 0 | 114 |
18011705
| 进阶 | 130 | 0 | 0 | 130 |
18021706
| 专家 | 145 | 0 | 0 | 145 |
1803-
| **合计** | **405** | **0** | **0** | **405** |
1707+
| **合计** | **405** | **16** | **0** | **389** |
18041708

18051709
---
18061710

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Qt 构建产物
2+
build/
3+
cmake-build-*/
4+
5+
# Qt Creator 配置文件
6+
*.user
7+
*.autosave
8+
9+
# CMake 生成文件
10+
CMakeCache.txt
11+
CMakeFiles/
12+
cmake_install.cmake
13+
Makefile
14+
*.cmake
15+
16+
# 编译产物
17+
*.o
18+
*.obj
19+
*.so
20+
*.dll
21+
*.dylib
22+
*.exe
23+
*.app
24+
25+
# IDE 配置目录
26+
.vscode/
27+
.idea/
28+
*.swp
29+
*.swo
30+
31+
# 调试文件
32+
*.dSYM/
33+
*.su
34+
*.idb
35+
*.pdb
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# QtBase 入门示例 01: QObject 与元对象系统
2+
# 最小化 CMake 配置,可独立构建
3+
4+
# 指定 CMake 最低版本要求(Qt6 要求 3.16+,推荐 3.26)
5+
cmake_minimum_required(VERSION 3.26)
6+
7+
# 项目声明:指定项目名和编程语言
8+
project(01-qobject-meta-system-beginner LANGUAGES CXX)
9+
10+
# 设置 C++ 标准(Qt6 推荐使用 C++17 或更高,这里使用 C++23)
11+
set(CMAKE_CXX_STANDARD 23)
12+
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 强制要求标准,不允许降级
13+
set(CMAKE_CXX_EXTENSIONS OFF) # 禁用编译器扩展,保证标准一致性
14+
15+
# 关键设置:启用 Qt 的自动化工具
16+
set(CMAKE_AUTOMOC ON) # 自动运行 MOC(元对象编译器),处理 Q_OBJECT 宏
17+
set(CMAKE_AUTORCC ON) # 自动处理资源文件(.qrc),本例不需要但配置备用
18+
set(CMAKE_AUTOUIC ON) # 自动处理 UI 文件(.ui),本例不需要但配置备用
19+
20+
# 查找 Qt6 的 Core 模块(QObject 是 QtCore 的一部分)
21+
# REQUIRED 表示必须找到,找不到会报错
22+
find_package(Qt6 REQUIRED COMPONENTS Core)
23+
24+
# 创建可执行文件
25+
# main.cpp 是我们的源代码文件
26+
qt_add_executable(${PROJECT_NAME}
27+
main.cpp
28+
)
29+
30+
# 链接 Qt 库
31+
# PRIVATE 表示这些依赖只在内部使用,不暴露给其他项目
32+
target_link_libraries(${PROJECT_NAME}
33+
PRIVATE Qt6::Core
34+
)
35+
36+
# 可选:设置输出目录
37+
set_target_properties(${PROJECT_NAME} PROPERTIES
38+
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
39+
)

0 commit comments

Comments
 (0)