Files
VX5_KRO_GearPump/doc/2026-04-29_日期替代逻辑迁移与BarcodeEditor联动工作日报.md
2026-04-29 14:10:10 +08:00

6.1 KiB
Raw Permalink Blame History

2026-04-29 日期替代逻辑迁移与 BarcodeEditor 联动工作日报

工作背景

  • DateReplaceEditor 是从 DateVarSet 中拆分出来的“代替”选项卡编辑器。
  • 当前 UI 已经拆分完成,但原先 DateVarSet 中“代替”页签对应的逻辑、默认数据、以及与 BarcodeEditor 的联动尚未完整迁移。
  • 目标是让 DateReplaceEditor、DateFormatEditor 在 BarcodeEditor 中成对工作,并补齐默认替换列表初始化能力。

本次完成内容

1. 为 DateReplaceEditor 补齐替代页数据模型接口

在 scene/DateReplaceEditor.h/.cpp 中补充并实现:

  • DateItemModel DateReplaceEditor::dateModel()
  • void DateReplaceEditor::setDateModel(const DateItemModel &model)

实现效果:

  • dateModel():把当前编辑器中的替代数据回收成 DateItemModel
    • dataMap
    • weeksMap
    • hoursMap
    • monthsMap
    • daysMap
    • yearsMap
  • setDateModel():将 DateItemModel 回填到编辑器内部列表,并依据当前替代类型刷新界面显示。

这样 DateReplaceEditor 就具备了和外部视图模型双向交换数据的能力。


2. 复刻 DateVarSet 中“代替”页默认数据初始化逻辑

在 DateReplaceEditor 中补齐了与 DateVarSet::initReplaceValue() 对应的默认初始化逻辑,包含以下替代列表:

  • dataList:0-9、A-F
  • weekList:MON-SUN
  • monthList:01-12
  • dayList:01-31
  • hourList:00-23
  • yearList/yearInitList:从当前年份开始连续 16 年

同时实现/整理了以下行为:

  • 根据替代类型切换不同分页展示:
    • 数据
    • 星期
    • 月
    • 年
    • 日
    • 时
  • 分页上下翻页逻辑
  • 每页 4 项内容展示
  • lineEdit_Replace1~4 文本变化实时写回对应列表
  • “预设值”按钮按类型写入对应替换映射

这部分逻辑与原 DateVarSet 的替代页行为保持一致。


3. 在 BarcodeEditor 中补充 DateReplaceEditor 的成对增删逻辑

在 scene/BarcodeEditor.h/.cpp 中新增并接入:

  • 成员:DateReplaceEditor *m_dateReplaceEditor = nullptr;
  • 构造函数中实例化 m_dateReplaceEditor
  • 析构函数中移除对应 tab 并释放对象

联动行为实现如下:

当内容模板包含 {t} 时

动态添加两个页签:

  • DateFormatEditor -> 标题:日期/时间
  • DateReplaceEditor -> 标题:代替

并设置尺寸与数据同步。

当内容模板不包含 {t} 时

动态移除上述两个页签,确保 DateFormatEditor 与 DateReplaceEditor 成对出现、成对消失。

在 bindViewModel() 中

  • 将 m_vm->dateViewModel() 转成 DateFormatEditorVM 后回填给 DateFormatEditor
  • 将 m_vm->dateViewModel() 直接回填给 DateReplaceEditor

从而保证条码编辑器在绑定数据后,两个日期相关页签都能正确显示已有配置。


4. 打通 BarcodeEditor 中“代替”页的数据回写

在 BarcodeEditor 的格式确认逻辑处理中,补充了 DateReplaceEditor 到 BarcodeViewModel 的数据回写:

  • 从 m_dateReplaceEditor->dateModel() 取出当前替代配置
  • 回写到 m_vm->dateViewModel() 的以下字段:
    • dataMap
    • daysMap
    • monthsMap
    • yearsMap
    • weeksMap
    • hoursMap

同时保留 DateFormatEditor 对以下日期字段的同步:

  • datetimePattern
  • daysOffset
  • monthsOffset

这样 BarcodeEditor 内部对日期格式页和日期替代页的数据已经形成完整闭环。

备注:后续如果 onBtnFormatClicked() 的业务逻辑再次调整,需要确保上述日期格式和替代数据的回写逻辑继续保留。


5. 为 DateItemModel 增加默认替代数据构造函数

在 scene/ViewModels.h 中为 DateItemModel 增加:

  • static DateItemModel createDefaultReplaceModel()

该函数用于统一构造默认“替代”数据,初始化内容如下:

  • dataMap:0-9/A-F
  • monthsMap:01-12
  • daysMap:01-31
  • weeksMap:MON-SUN
  • hoursMap:00-23
  • yearsMap:当前年份起连续 16 年,键和值均为年份文本

其默认规则严格参考 DateVarSet::initReplaceValue() 的实现,作为公共默认数据来源。


6. 在 BarcodeEditor 中接入默认替代列表初始化

在 scene/BarcodeEditor.cpp 中,使用 DateItemModel::createDefaultReplaceModel() 进行了两处接入:

构造函数中

  • 为新创建的 m_vm 直接设置默认 dateViewModel
  • 再同步给 m_dateReplaceEditor

目的:

  • 即便外部还未绑定真实数据,DateReplaceEditor 也能拥有完整默认替换列表,不会出现空白替代项。

bindViewModel() 中

  • 对传入的 dateViewModel 做兜底检查
  • 若以下任意替代字段为空,则仅补齐缺失字段,而不覆盖已有数据:
    • dataMap
    • daysMap
    • monthsMap
    • yearsMap
    • weeksMap
    • hoursMap

目的:

  • 保证已有业务数据优先
  • 缺失时自动回填默认替代列表
  • 避免出现部分字段为空导致编辑器显示异常的问题

涉及文件

本次涉及的主要文件:

  • scene/DateReplaceEditor.h
  • scene/DateReplaceEditor.cpp
  • scene/BarcodeEditor.h
  • scene/BarcodeEditor.cpp
  • scene/ViewModels.h

当前结果

目前已实现:

  • DateReplaceEditor 具备独立替代逻辑与数据模型读写能力
  • DateReplaceEditor 与 DateFormatEditor 在 BarcodeEditor 中成对出现/删除
  • BarcodeEditor 可同步和回写替代数据
  • DateItemModel 可统一生成默认替代列表
  • BarcodeEditor 已接入默认替代列表初始化和缺失字段兜底

后续建议

  • 在真正的“确定/保存”入口统一调用 DateFormatEditor 与 DateReplaceEditor 的回写逻辑,避免后续格式按钮语义变更带来数据遗漏。
  • 若后续还有其他编辑器需要复用日期默认替代列表,统一使用 DateItemModel::createDefaultReplaceModel(),避免重复维护多份初始化代码。
  • 后续如需联调,请先修复 Qt 工程生成链路(qmake / ui_*.h / includePath / Makefile)后再进行完整编译验证。