Files
scuc-qt-course/docs/teaching/examples/table_widget/README.md
T
张宗平 6d1895d696 教学示例补 5 个:3 个坑点复现 + QTableWidget + Day5 学员管理器参考实现
- pitfall_stack_widget / pitfall_lambda_capture / pitfall_double_connect:
  默认跑正确写法(离屏验证退出码 0),--crash / --dangle 开关课堂现场触发
  真实崩溃/悬空访问
- table_widget:QTableWidget 单元格事件最小示例(新安排 Day4「表格事件」)
- student_manager:Day5 综合案例参考实现,离屏自测覆盖 JSON round-trip
  与 QThread 后台导入闭环
- 均接入 examples/CMakeLists.txt 的 add_teaching_example,手工维护区不影响生成器
2026-07-05 12:49:20 +08:00

45 lines
2.0 KiB
Markdown
Raw 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.
# 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 案例的核心控件就是它)