Files
张宗平 13b3ebbe14 课程代码仓库初始化:Part1 (144) + Part3 (29) 全量生成与验证
把川大 wiki「02.Qt方向」课程代码整理为 CMake 管理的可编译运行项目。

Part1 C/C++ 强化 (p01/, 144 目标, host gcc/g++ 构建, 全绿):
- 修复全部编译失败:补 <cstring>/<fstream>/<iomanip>/<vector> 等缺失头
  (common_fix + infer_stl_includes 自动检测注入)、修正 pause() 壳注入
  (改检测已转换后的 pause 调用)、namespace 提升出函数体、const 成员函数
  正确性、dedupe 不再破坏函数重载集、K&R 隐式 int / 动态异常规范等
  C++17 移除特性的可编译等价改写。
- 目录采用深缩写 p01/ch04/s03/ (原 part1_cpp/ch04_class_object/03_ctor_dtor)。

Part3 Qt 桌面 (p03/, 29 目标, 隔离 Qt 5.14.2 构建, 全绿):
- gen_part3.py: Qt 外壳模板 (main+QApplication+show, QTimer 自动退出便于
  offscreen 验证)、AUTOMOC + .moc include、rewrite_* 处理散文混入/重载/
  资源依赖、生成占位 png/gif + .qrc + rundata 样例数据。
- 修正 QLable 笔误、全角分号、.→->、Windows 路径、QApplication 阻塞事件
  循环改为 QCoreApplication 等。

任务1 概念/版本验证:
- tools/std_probe.py: 跨 -std= 编译探针 (--pedantic-errors 让已废除特性硬失败)。
- tools/demo_versions/: K&R 隐式 int、三目左值、void* 转换、enum 赋整、
  const 经指针、动态异常规范 共 6 个跨版本演示。
- docs/VERSION_NOTES.md: 每条「原文说法→C17/C++17 是否成立→何版本成立→已验证」。

文档: 顶层 README、docs/SOURCE_PAGES.md (页面→目录映射)、
docs/ERRATA.md (Part1 修正)、docs/ERRATA_part3.md (Part3 修正)。
另修复 tools/run.sh / run_qt.sh 的 ${1:?...} 引号语法 bug。

隔离 Qt 验证: ldd 0 系统 Qt 引用; 173/173 目标全绿; p03 offscreen 运行通过。
2026-06-30 14:16:55 +08:00

1 line
13 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"id":"58954512","type":"page","status":"current","title":"03.Qt桌面应用开发","version":{"by":{"type":"known","username":"suncaper","userKey":"ff80818177bd0eb50179c1060d480003","profilePicture":{"path":"/images/icons/profilepics/default.svg","width":48,"height":48,"isDefault":true},"displayName":"suncaper","_links":{"self":"https://wiki.suncaper.net/rest/api/user?key=ff80818177bd0eb50179c1060d480003"},"_expandable":{"status":""}},"when":"2025-07-03T04:14:09.174Z","message":"","number":2,"minorEdit":false,"hidden":false,"_links":{"self":"https://wiki.suncaper.net/rest/experimental/content/58954512/version/2"},"_expandable":{"content":"/rest/api/content/58954512"}},"body":{"storage":{"value":"<p><ac:structured-macro ac:name=\"anchor\" ac:schema-version=\"1\" ac:macro-id=\"a46f5037-ac72-4f86-a514-bca88e578375\"><ac:parameter ac:name=\"\">_Toc466556748</ac:parameter></ac:structured-macro><span style=\"color: rgb(54,95,145);\"><strong>目录</strong></span><br /><ac:link><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[1 Qt概述 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841977\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[1.1 什么是Qt ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841978\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[1.2 Qt的发展史 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841979\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[1.3 支持的平台 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841980\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[1.4 Qt版本 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841981\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[1.5 Qt的下载与安装 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841982\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[下载地址: ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841983\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[Linux Host ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841984\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[OS X Host ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841985\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[Windows Host ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841986\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[安装 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841987\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[1.6 Qt的优点 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841988\"><ri:page ri:content-title=\"1 Qt概述\" /><ac:plain-text-link-body><![CDATA[1.7 成功案例 ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"2 创建Qt项目\" /><ac:plain-text-link-body><![CDATA[2 创建Qt项目 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841990\"><ri:page ri:content-title=\"2 创建Qt项目\" /><ac:plain-text-link-body><![CDATA[2.1 使用向导创建 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841991\"><ri:page ri:content-title=\"2 创建Qt项目\" /><ac:plain-text-link-body><![CDATA[2.2 手动创建 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841992\"><ri:page ri:content-title=\"2 创建Qt项目\" /><ac:plain-text-link-body><![CDATA[2.3 .pro文件 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841993\"><ri:page ri:content-title=\"2 创建Qt项目\" /><ac:plain-text-link-body><![CDATA[2.4 一个最简单的Qt应用程序 ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"3 第一个Qt小程序\" /><ac:plain-text-link-body><![CDATA[3 第一个Qt小程序 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841995\"><ri:page ri:content-title=\"3 第一个Qt小程序\" /><ac:plain-text-link-body><![CDATA[3.1 按钮的创建 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841996\"><ri:page ri:content-title=\"3 第一个Qt小程序\" /><ac:plain-text-link-body><![CDATA[3.2 对象模型(对象树) ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841997\"><ri:page ri:content-title=\"3 第一个Qt小程序\" /><ac:plain-text-link-body><![CDATA[3.3 Qt窗口坐标体系 ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"4 信号和槽机制\" /><ac:plain-text-link-body><![CDATA[4 信号和槽机制 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471841999\"><ri:page ri:content-title=\"4 信号和槽机制\" /><ac:plain-text-link-body><![CDATA[4.1 系统自带的信号和槽 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842000\"><ri:page ri:content-title=\"4 信号和槽机制\" /><ac:plain-text-link-body><![CDATA[4.2 自定义信号和槽 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842001\"><ri:page ri:content-title=\"4 信号和槽机制\" /><ac:plain-text-link-body><![CDATA[4.3信号槽的拓展 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842002\"><ri:page ri:content-title=\"4 信号和槽机制\" /><ac:plain-text-link-body><![CDATA[4.4 Qt4版本的信号槽写法 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842003\"><ri:page ri:content-title=\"4 信号和槽机制\" /><ac:plain-text-link-body><![CDATA[4.5 Lambda表达式 ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"5 QMainWindow\" /><ac:plain-text-link-body><![CDATA[5 QMainWindow ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842005\"><ri:page ri:content-title=\"5 QMainWindow\" /><ac:plain-text-link-body><![CDATA[5.1 菜单栏 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842006\"><ri:page ri:content-title=\"5 QMainWindow\" /><ac:plain-text-link-body><![CDATA[5.2 工具栏 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842007\"><ri:page ri:content-title=\"5 QMainWindow\" /><ac:plain-text-link-body><![CDATA[5.3 状态栏 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842008\"><ri:page ri:content-title=\"5 QMainWindow\" /><ac:plain-text-link-body><![CDATA[5.4 铆接部件 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842009\"><ri:page ri:content-title=\"5 QMainWindow\" /><ac:plain-text-link-body><![CDATA[5.5 核心部件(中心部件) ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842010\"><ri:page ri:content-title=\"5 QMainWindow\" /><ac:plain-text-link-body><![CDATA[5.6 资源文件 ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"6 对话框QDialog\" /><ac:plain-text-link-body><![CDATA[6 对话框QDialog ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842012\"><ri:page ri:content-title=\"6 对话框QDialog\" /><ac:plain-text-link-body><![CDATA[6.1 基本概念 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842013\"><ri:page ri:content-title=\"6 对话框QDialog\" /><ac:plain-text-link-body><![CDATA[6.2 标准对话框 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842014\"><ri:page ri:content-title=\"6 对话框QDialog\" /><ac:plain-text-link-body><![CDATA[6.3 自定义消息框 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842015\"><ri:page ri:content-title=\"6 对话框QDialog\" /><ac:plain-text-link-body><![CDATA[6.4 消息对话框 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842016\"><ri:page ri:content-title=\"6 对话框QDialog\" /><ac:plain-text-link-body><![CDATA[6.5 标准文件对话框 ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"7 布局管理器\" /><ac:plain-text-link-body><![CDATA[7 布局管理器 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842018\"><ri:page ri:content-title=\"7 布局管理器\" /><ac:plain-text-link-body><![CDATA[7.1 系统提供的布局控件 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842019\"><ri:page ri:content-title=\"7 布局管理器\" /><ac:plain-text-link-body><![CDATA[7.2 利用widget做布局 ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"8 常用控件\" /><ac:plain-text-link-body><![CDATA[8 常用控件 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842021\"><ri:page ri:content-title=\"8 常用控件\" /><ac:plain-text-link-body><![CDATA[8.1 QLabel控件使用 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842022\"><ri:page ri:content-title=\"8 常用控件\" /><ac:plain-text-link-body><![CDATA[显示文字 (普通文本、html ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842023\"><ri:page ri:content-title=\"8 常用控件\" /><ac:plain-text-link-body><![CDATA[显示图片 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842024\"><ri:page ri:content-title=\"8 常用控件\" /><ac:plain-text-link-body><![CDATA[显示动画 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842025\"><ri:page ri:content-title=\"8 常用控件\" /><ac:plain-text-link-body><![CDATA[8.2 QLineEdit ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842026\"><ri:page ri:content-title=\"8 常用控件\" /><ac:plain-text-link-body><![CDATA[8.3 其他控件 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842027\"><ri:page ri:content-title=\"8 常用控件\" /><ac:plain-text-link-body><![CDATA[8.4 自定义控件 ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"9 Qt消息机制和事件\" /><ac:plain-text-link-body><![CDATA[9 Qt消息机制和事件 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842029\"><ri:page ri:content-title=\"9 Qt消息机制和事件\" /><ac:plain-text-link-body><![CDATA[9.1 事件 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842030\"><ri:page ri:content-title=\"9 Qt消息机制和事件\" /><ac:plain-text-link-body><![CDATA[9.2 event() ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842031\"><ri:page ri:content-title=\"9 Qt消息机制和事件\" /><ac:plain-text-link-body><![CDATA[9.3 事件过滤器 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842032\"><ri:page ri:content-title=\"9 Qt消息机制和事件\" /><ac:plain-text-link-body><![CDATA[9.4 总结 ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"10 绘图和绘图设备\" /><ac:plain-text-link-body><![CDATA[10 绘图和绘图设备 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842034\"><ri:page ri:content-title=\"10 绘图和绘图设备\" /><ac:plain-text-link-body><![CDATA[10.1 QPainter ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842035\"><ri:page ri:content-title=\"10 绘图和绘图设备\" /><ac:plain-text-link-body><![CDATA[10.2 绘图设备 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842036\"><ri:page ri:content-title=\"10 绘图和绘图设备\" /><ac:plain-text-link-body><![CDATA[10.2.1 QPixmap、QBitmap、QImage ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842037\"><ri:page ri:content-title=\"10 绘图和绘图设备\" /><ac:plain-text-link-body><![CDATA[10.2.2 QPicture ]]></ac:plain-text-link-body></ac:link><br /><ac:link><ri:page ri:content-title=\"11 文件系统\" /><ac:plain-text-link-body><![CDATA[11 文件系统 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842039\"><ri:page ri:content-title=\"11 文件系统\" /><ac:plain-text-link-body><![CDATA[11.1 基本文件操作 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842040\"><ri:page ri:content-title=\"11 文件系统\" /><ac:plain-text-link-body><![CDATA[11.2 二进制文件读写 ]]></ac:plain-text-link-body></ac:link><br /><ac:link ac:anchor=\"_Toc471842041\"><ri:page ri:content-title=\"11 文件系统\" /><ac:plain-text-link-body><![CDATA[11.3 文本文件读写 ]]></ac:plain-text-link-body></ac:link></p>","representation":"storage","_expandable":{"content":"/rest/api/content/58954512"}},"_expandable":{"editor":"","view":"","export_view":"","styled_view":"","anonymous_export_view":""}},"extensions":{"position":2},"_links":{"webui":"/pages/viewpage.action?pageId=58954512","edit":"/pages/resumedraft.action?draftId=58954512","tinyui":"/x/EJODAw","collection":"/rest/api/content","base":"https://wiki.suncaper.net","context":"","self":"https://wiki.suncaper.net/rest/api/content/58954512"},"_expandable":{"container":"/rest/api/space/2CT","metadata":"","operations":"","children":"/rest/api/content/58954512/child","restrictions":"/rest/api/content/58954512/restriction/byOperation","history":"/rest/api/content/58954512/history","ancestors":"","descendants":"/rest/api/content/58954512/descendant","space":"/rest/api/space/2CT"}}