6d1895d696
- 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,手工维护区不影响生成器
QTableWidget 表格与单元格事件 —— 教学补充示例
对应教案
OUTLINE_4DAY.mdDay4 上午「表格」环节 (新版 10 天安排原文「绘图事件及表格事件」)。手工维护,非生成产物。
概念
Qt 展示表格数据有两条路线:
- item 类控件(本示例):
QTableWidget——数据直接塞进控件 (QTableWidgetItem),上手快,中小项目够用; - Model/View 架构(延伸钩子):数据(model)与展示(view)彻底分离,
同一模型可喂多个视图,见
../model_view/。
「表格事件」以信号形式暴露:cellClicked / cellDoubleClicked /
itemChanged(编辑单元格后触发)……常规交互不需要重写 event 函数。
代码走读
- 构造 3×3 表格,
setHorizontalHeaderLabels设列头,列宽Stretch自适应; - 每个单元格一个
QTableWidgetItem,new出来交给表格接管所有权 (又是父子所有权模型——第几次出现了?); 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/的做法重做本例,体会两条路线的差异。
参考
- 本仓库对照:
../model_view/qt_model_view_basics.cpp - 综合运用:
../student_manager/(Day5 案例的核心控件就是它)