Files
scuc-qt-course/docs/teaching/examples/table_widget
张宗平 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
..

QTableWidget 表格与单元格事件 —— 教学补充示例

对应教案 OUTLINE_4DAY.md Day4 上午「表格」环节 (新版 10 天安排原文「绘图事件及表格事件」)。手工维护,非生成产物。

概念

Qt 展示表格数据有两条路线:

  • item 类控件(本示例)QTableWidget——数据直接塞进控件 QTableWidgetItem),上手快,中小项目够用;
  • Model/View 架构(延伸钩子):数据(model)与展示(view)彻底分离, 同一模型可喂多个视图,见 ../model_view/

「表格事件」以信号形式暴露:cellClicked / cellDoubleClicked / itemChanged(编辑单元格后触发)……常规交互不需要重写 event 函数。

代码走读

qt_table_widget_basics.cpp

  1. 构造 3×3 表格,setHorizontalHeaderLabels 设列头,列宽 Stretch 自适应;
  2. 每个单元格一个 QTableWidgetItemnew 出来交给表格接管所有权 (又是父子所有权模型——第几次出现了?);
  3. cellClicked 连成员函数槽、itemChanged 连 lambda(注意第五参数传了 this,呼应 Day2 坑卡),点击/编辑结果显示在下方 QLabel

验证方式

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/ 的做法重做本例,体会两条路线的差异。

参考