# 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 案例的核心控件就是它）
