70 lines
3.3 KiB
Markdown
70 lines
3.3 KiB
Markdown
# Fix-BUG-20251220-0001
|
||
|
||
> 适用场景:记录某个 BUG 的修复方案、影响评估、验证结果与落地信息。
|
||
|
||
## 关联信息
|
||
|
||
- Fix ID: Fix-BUG-20251220-0001
|
||
- 关联 BUG ID: BUG-20251220-0001
|
||
- 修复目标: 正确支持绘制前设置默认激活页,并在首次绘制时激活对应页面;运行时调用则立即切换,且不崩溃。
|
||
- 状态:已完成
|
||
- 负责人: 未记录
|
||
- 分支 / 版本: master / v2.3.2
|
||
|
||
## 根因分析
|
||
|
||
- 根因: `setActiveIndex()` 在设置默认激活时直接调用页签按钮点击回调,但绘制前页签按钮部分内部指针尚未初始化,导致空指针访问。
|
||
- 触发条件: 绘制前调用 `TabControl::setActiveIndex()`。
|
||
- 为什么之前没发现:[可选] 测试缺失,未覆盖绘制前设置默认激活页的生命周期场景。
|
||
- 关键证据:[可选] 最小复现仅需创建 TabControl 并在绘制前调用 `setActiveIndex(0)`。
|
||
|
||
## 修复方案
|
||
|
||
- 修复思路: 首次绘制前调用 `setActiveIndex()` 时只记录默认激活索引,不立即调用页签按钮点击回调;在 `TabControl::draw()` 完成基础绘制后再应用默认激活。
|
||
- 关键改动:
|
||
- `TabControl::setActiveIndex()` 在首次绘制前仅记录默认激活页索引。
|
||
- `TabControl::draw()` 绘制完成后检查是否为首次绘制、是否设置默认激活页、索引是否合法。
|
||
- 新增成员 `TabControl::IsFirstDraw`,用于判断是否首次绘制。
|
||
- 新增成员 `TabControl::defaultActivation`,用于记录默认激活索引;未设置时为 `-1`。
|
||
- 涉及文件 / 类 / 函数:
|
||
- `TabControl.h`
|
||
- `TabControl.cpp`
|
||
- `TabControl::setActiveIndex()`
|
||
- `TabControl::draw()`
|
||
- 影响的 API / 行为:[可选] 对外接口不变;内部延迟首次激活流程。
|
||
- 关键约束 / 不变量:[可选]
|
||
- 首次绘制前的默认激活只记录,不触发未初始化对象的点击回调。
|
||
- 首次绘制后调用 `setActiveIndex()` 应立即切换激活页。
|
||
- 回滚点 / 开关:[可选] 回退默认激活延迟应用逻辑。
|
||
|
||
## 影响评估
|
||
|
||
- 影响范围: TabControl 默认激活、首次绘制、运行时程序化切页。
|
||
- 兼容性影响:无(对外接口不变)
|
||
- 行为变化:有(绘制前设置默认激活页改为首次绘制后应用)
|
||
- 性能影响:无明显影响。
|
||
- 回归风险:
|
||
- 默认激活索引越界时的行为需要与既有预期保持一致。
|
||
- 开关模式下页签按钮选中态需要与激活页同步。
|
||
|
||
## 验证结果
|
||
|
||
- 验证步骤:
|
||
|
||
1. 创建页签数为 2 的 TabControl。
|
||
2. 分别在绘制前调用 `setActiveIndex(0)`、`setActiveIndex(1)`、越界索引。
|
||
3. 确认索引 0 / 1 在首次绘制时激活对应页面,按钮处于选中状态。
|
||
4. 运行过程中通过 Button 回调调用 `setActiveIndex()`,确认立即切换激活页。
|
||
5. 验证未调用 `setActiveIndex()` 时默认不激活任何页面。
|
||
|
||
- 验证结果: PDF 历史记录标记已修复。
|
||
- 回归检查:[可选] 页签点击切换、程序化切换、默认不激活场景、开关模式选中态、页签数量变化与越界索引行为。
|
||
- 验证证据:[可选]
|
||
|
||
## 落地信息
|
||
|
||
- Commit: 0c1cf2938f0d6c5684eeb318f17a8443e0c8cf5a
|
||
- PR:[可选] git 推送
|
||
- 发布版本: v2.3.2
|
||
- 备注: 来源原始 Fix 记录未包含 `-XXXX` 后缀,入库时按 BUG ID 补充为 `Fix-BUG-20251220-0001`。
|