# QTableWidget 表格与单元格事件 —— 教学补充示例 > 对应教案 [`OUTLINE_4DAY.md`](../../OUTLINE_4DAY.md) Day4 上午「表格」环节 > (新版 10 天安排原文「绘图事件及表格事件」)。手工维护,非生成产物。 ## 概念 Qt 展示表格数据有两条路线: - **item 类控件(本示例)**:`QTableWidget`——数据直接塞进控件 (`QTableWidgetItem`),上手快,中小项目够用; - **Model/View 架构(延伸钩子)**:数据(model)与展示(view)彻底分离, 同一模型可喂多个视图,见 [`../model_view/`](../model_view/README.md)。 「表格事件」以**信号**形式暴露:`cellClicked` / `cellDoubleClicked` / `itemChanged`(编辑单元格后触发)……常规交互不需要重写 `event` 函数。 ## 代码走读 见 [`qt_table_widget_basics.cpp`](qt_table_widget_basics.cpp): 1. 构造 3×3 表格,`setHorizontalHeaderLabels` 设列头,列宽 `Stretch` 自适应; 2. 每个单元格一个 `QTableWidgetItem`,`new` 出来交给表格接管所有权 (又是父子所有权模型——第几次出现了?); 3. `cellClicked` 连成员函数槽、`itemChanged` 连 lambda(注意第五参数传了 `this`,呼应 Day2 坑卡),点击/编辑结果显示在下方 `QLabel`。 ## 验证方式 ```bash QT_QPA_PLATFORM=offscreen tools/run_qt.sh qt_table_widget_basics # 离屏跑通,200ms 自动退出 tools/run_qt.sh qt_table_widget_basics # 有 X 环境:点击/编辑单元格看状态栏变化 ``` ## 练习方向(供任务卡引用) - 加一个「添加行」按钮:`insertRow` + 三个新 item; - 双击某行弹 `QMessageBox` 显示整行内容(`cellDoubleClicked`); - 进阶:改用 `../model_view/` 的做法重做本例,体会两条路线的差异。 ## 参考 - 本仓库对照:[`../model_view/qt_model_view_basics.cpp`](../model_view/qt_model_view_basics.cpp) - 综合运用:[`../student_manager/`](../student_manager/README.md)(Day5 案例的核心控件就是它)