# 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 <QPushButton>」，且含中文字符串`
- **修正**：`重写为可编译 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）`
- **依据**：原文两块是读写示例的不同片段，独立不可编译；合并为完整程序。

