# ERRATA — 代码修正记录(Part3 Qt) 本文件由 `tools/gen_part3.py` 自动生成,记录对 wiki 原始 Qt 代码块的每一处修正。 格式:`[pageId:blockIdx]` 类型 → 原内容 → 修正后 → 依据。 ## [58954515:0] missing-symbol - **原文**:`原文 #include "widget.h" 引用外部 Widget 类(widget.h/widget.cpp 不在块内)` - **修正**:`在文件内就地补一个最小 Widget : public QWidget(Q_OBJECT)+ main` - **依据**:原 wiki 的「最简单 Qt 程序」依赖外部的 widget.h;按「示例相对隔离」拆分为独立目标后本文件缺少 Widget 定义。补最小 Widget 使其自洽可编译运行。 ## [58954525:0] prose-in-code - **原文**:`按钮创建片段行内混入散文「头文件 #include 」,且含中文字符串` - **修正**:`重写为可编译 DemoWidget(剥离散文、保留中文文本)` - **依据**:原 wiki 把讲解散文粘在代码行内(如 #include 当成尾巴),破坏语法;通用 prose 剥离会误伤字符串内的中文,故整体重写保留教学意图。 ## [58954527:0] harness-context - **原文**:`片段 connect(quitBtn,&QPushButton::clicked,this,&MyWidget::close) 引用 MyWidget,但 MyWidget 定义不在块内` - **修正**:`补 DemoWidget 子类 + main 外壳,槽用 QWidget::close(系统自带)` - **依据**:原 wiki 片段假定存在 MyWidget 类与 close 槽;按「示例相对隔离」补齐类骨架与 main,演示「系统自带信号(clicked)→系统自带槽(close)」。 ## [58954527:2] prose-in-code - **原文**:`自定义信号槽:Teacher/Student/MyWidget 定义与中文散文混排,且信号名 hungury 笔误、槽名 treat/eat 不一致` - **修正**:`重写为可编译对照程序:信号 hungry()/hungry(QString)、槽 treat()/treat(QString),函数指针重载解析 connect` - **依据**:原 wiki 把类定义、emit、connect 与中文讲解散文混在一个代码块,无法编译;信号名 hungury 疑为 hungry 笔误。重写保留「自定义信号+槽+重载」教学意图。 ## [58954529:4] prose-in-code - **原文**:`QDockWidget 片段尾部混入散文「设置区域范围」,含中文标题字符串` - **修正**:`重写为可编译 DemoMainWindow(剥离散文、保留中文标题)` - **依据**:原 wiki 把讲解散文粘在代码行尾(setAllowedAreas 后接「设置区域范围」),破坏语法;整体重写保留「铆接部件」教学意图。 ## [58954535:12] merge+rewrite - **原文**:`文件对话框示例分散在 12/13/14 三块(含 :/images/file-open 资源、connect、openFile/saveFile 实现)` - **修正**:`合并重写为单一可运行 MainWindow 程序,菜单/工具栏触发文件对话框读写` - **依据**:原文三块是同一 MainWindow 的不同部分(构造、连接、槽实现),独立成文件无法编译;合并为完整目标。原文引用资源图标,本目标用纯文字 Action 避免资源依赖。 ## [58954540:1] typo - **原文**:`QLable` - **修正**:`QLabel` - **依据**:笔误:QLabel 误写为 QLable。 ## [58954540:img] merge+typo - **原文**:`显示图片示例分散在 3 块(QPixmap pixmap; pixmap.load(:/Image/boat.jpg); label.setPixmap(pixmap) 用了 . 而非 ->)` - **修正**:`合并为一个目标,修正 .→->,资源 :/Image/boat.jpg 由生成占位 png + .qrc 提供` - **依据**:原文 label 是 QLabel* 却用 . 调用 setPixmap(C++ 指针须用 ->);三块拆开不可编译。 ## [58954540:movie] merge+typo - **原文**:`显示动画示例分散在 3 块(QMovie(:/Mario.gif)、movie->start()、QLabel 全角分号 ;)` - **修正**:`合并为一个目标,全角分号→半角,资源 :/Mario.gif 由生成占位 gif + .qrc 提供` - **依据**:原文 QLabel 定义末尾用了全角分号 ;(C++ 非法);三块拆开不可编译。 ## [58954540:15] h+cpp-merge - **原文**:`自定义控件 SmallWidget 在 wiki 中以 smallwidget.h 内联展示(Q_OBJECT + spin/slider/layout/connect)` - **修正**:`输出为单 .cpp(含类定义+main 实例化),保留 Qt5 static_cast 重载解析写法` - **依据**:原 wiki 把类定义放 .h 注释块;按「每目标单文件」输出,AUTOMOC 处理 Q_OBJECT。 ## [58954546:0] syntax+merge - **原文**:`EventLabel 事件重写程序:QString("...(%1, %2)\n...") 内误入字面换行(断行)导致字符串未终结;类声明与实现分散` - **修正**:`合并为单 .cpp,字符串内换行移除(\n 移出字符串或删除),补 setMouseTracking` - **依据**:原 wiki 的 QString 字面量在源码中跨行书写(实际是 \n 后跟换行),C++ 字符串字面量不能直接跨行,导致 missing terminating "。修正为单行字符串。同时补 mouseTracking。 ## [58954546:2] member-def-harness - **原文**:`CustomWidget::event(QEvent*) override 片段(处理 KeyPress/Tab)缺少所属类骨架与 main` - **修正**:`补 CustomWidget : public QWidget 骨架(含 event override)+ main 外壳,行为对照原文` - **依据**:原 wiki 只给成员函数定义,缺少类声明与 main;按「示例相对隔离」补齐使其可编译运行。 ## [58954546:6] class+main-harness - **原文**:`事件过滤器 MainWindow(eventFilter override + installEventFilter)片段缺 main 与完整结构` - **修正**:`补完整 MainWindow(含 QLabel、eventFilter、installEventFilter)+ main 外壳` - **依据**:原 wiki 给出 MainWindow 类骨架但缺 main;补齐使其可编译运行,演示事件过滤机制。 ## [58954548:0] h+cpp-merge - **原文**:`PaintedWidget 类声明(10.1 block0)与其构造+paintEvent 实现(block1)分两块` - **修正**:`合并为单 .cpp(Q_OBJECT 类 + paintEvent),补 main 外壳演示 drawLine/Rect/Ellipse` - **依据**:原文类声明与成员实现分属两块;按「每目标单文件」合并,AUTOMOC 处理 Q_OBJECT。 ## [58954548:2] member-def-harness - **原文**:`PaintWidget::paintEvent 绘 pixmap/bitmap(引用 :/Image/butterfly.png、butterfly1.png)` - **修正**:`补 PaintWidget 类骨架 + main,资源由生成占位 png + .qrc 提供` - **依据**:原 wiki 仅给成员函数定义,缺类骨架与 main;资源图片用占位 png 提供以可编译运行。 ## [58954548:3] member-def-harness - **原文**:`PaintWidget::paintEvent 绘 QImage(setPixel 循环逐像素设色)片段` - **修正**:`补 PaintWidget 类骨架 + main 外壳` - **依据**:原 wiki 仅给成员函数定义,缺类骨架与 main;补齐使其可编译运行。 ## [58954548:4] platform-path - **原文**:`QPicture 保存路径为 "D:\ndrawing.pic"(Windows 路径,且 \n 被解析为换行符)` - **修正**:`改为相对路径 "drawing.pic"(跨平台可移植)` - **依据**:原路径是 Windows 绝对路径,\n 在字符串中被当作换行符导致路径错误;改为相对路径使示例在 Linux 下可编译运行。 ## [58954552:0] blocking-event-loop - **原文**:`原文用 QApplication + app.exec()(阻塞 GUI 事件循环),但示例实为控制台文件操作` - **修正**:`改用 QCoreApplication,文件 IO 完成后直接 return 0(不进事件循环)` - **依据**:QApplication::exec() 进入 GUI 事件循环会一直阻塞;该示例不创建窗口,仅做文件读写,用 QCoreApplication 并直接返回即可正确退出,便于自动化运行验证。原行为不变。 ## [58954552:data] merge - **原文**:`二进制读写示例分散在 3 块(写/读/读写),各自引用 file.dat 且未检查 open() 返回值` - **修正**:`合并为一个程序:先写 file.dat 再读回,补 open() 检查,用 QCoreApplication(无需 GUI)` - **依据**:原文三块是读写示例的不同片段,独立不可编译;合并为完整程序。补 open() 检查避免未定义行为;数据文件 file.dat 程序自建。 ## [58954552:text] merge - **原文**:`文本读写示例分散在 2 块(写/读),各自引用 file.txt` - **修正**:`合并为一个程序:先写 file.txt 再逐行读回,用 QCoreApplication(无需 GUI)` - **依据**:原文两块是读写示例的不同片段,独立不可编译;合并为完整程序。