6.1 KiB
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():把当前编辑器中的替代数据回收成DateItemModeldataMapweeksMaphoursMapmonthsMapdaysMapyearsMap
setDateModel():将DateItemModel回填到编辑器内部列表,并依据当前替代类型刷新界面显示。
这样 DateReplaceEditor 就具备了和外部视图模型双向交换数据的能力。
2. 复刻 DateVarSet 中“代替”页默认数据初始化逻辑
在 DateReplaceEditor 中补齐了与 DateVarSet::initReplaceValue() 对应的默认初始化逻辑,包含以下替代列表:
dataList:0-9、A-FweekList:MON-SUNmonthList:01-12dayList:01-31hourList:00-23yearList/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()的以下字段:dataMapdaysMapmonthsMapyearsMapweeksMaphoursMap
同时保留 DateFormatEditor 对以下日期字段的同步:
datetimePatterndaysOffsetmonthsOffset
这样 BarcodeEditor 内部对日期格式页和日期替代页的数据已经形成完整闭环。
备注:后续如果
onBtnFormatClicked()的业务逻辑再次调整,需要确保上述日期格式和替代数据的回写逻辑继续保留。
5. 为 DateItemModel 增加默认替代数据构造函数
在 scene/ViewModels.h 中为 DateItemModel 增加:
static DateItemModel createDefaultReplaceModel()
该函数用于统一构造默认“替代”数据,初始化内容如下:
dataMap:0-9/A-FmonthsMap:01-12daysMap:01-31weeksMap:MON-SUNhoursMap:00-23yearsMap:当前年份起连续 16 年,键和值均为年份文本
其默认规则严格参考 DateVarSet::initReplaceValue() 的实现,作为公共默认数据来源。
6. 在 BarcodeEditor 中接入默认替代列表初始化
在 scene/BarcodeEditor.cpp 中,使用 DateItemModel::createDefaultReplaceModel() 进行了两处接入:
构造函数中
- 为新创建的
m_vm直接设置默认dateViewModel - 再同步给
m_dateReplaceEditor
目的:
- 即便外部还未绑定真实数据,
DateReplaceEditor也能拥有完整默认替换列表,不会出现空白替代项。
bindViewModel() 中
- 对传入的
dateViewModel做兜底检查 - 若以下任意替代字段为空,则仅补齐缺失字段,而不覆盖已有数据:
dataMapdaysMapmonthsMapyearsMapweeksMaphoursMap
目的:
- 保证已有业务数据优先
- 缺失时自动回填默认替代列表
- 避免出现部分字段为空导致编辑器显示异常的问题
涉及文件
本次涉及的主要文件:
scene/DateReplaceEditor.hscene/DateReplaceEditor.cppscene/BarcodeEditor.hscene/BarcodeEditor.cppscene/ViewModels.h
当前结果
目前已实现:
DateReplaceEditor具备独立替代逻辑与数据模型读写能力DateReplaceEditor与DateFormatEditor在BarcodeEditor中成对出现/删除BarcodeEditor可同步和回写替代数据DateItemModel可统一生成默认替代列表BarcodeEditor已接入默认替代列表初始化和缺失字段兜底
后续建议
- 在真正的“确定/保存”入口统一调用
DateFormatEditor与DateReplaceEditor的回写逻辑,避免后续格式按钮语义变更带来数据遗漏。 - 若后续还有其他编辑器需要复用日期默认替代列表,统一使用
DateItemModel::createDefaultReplaceModel(),避免重复维护多份初始化代码。 - 后续如需联调,请先修复 Qt 工程生成链路(
qmake/ui_*.h/ includePath / Makefile)后再进行完整编译验证。