Files
VX5_KRO_GearPump/doc/DateItemModel修改总结.md
T
2026-05-11 09:11:30 +08:00

2.4 KiB
Raw Blame History

DateItemModel 修改总结

修改概述

已成功将 DateItemModel 中的 QStringList 成员变量替换为 std::array<QString, N> 以提高类型安全性和访问性能。

修改的文件

1. scene/ViewModels.h

  • 添加了 #include <array>
  • 将 QStringList 成员变量替换为 std::array<QString, N>:
    • QStringList dataMap → std::array<QString, 16> dataMap
    • QStringList daysMap → std::array<QString, 31> daysMap
    • QStringList monthsMap → std::array<QString, 12> monthsMap
    • QStringList weeksMap → std::array<QString, 7> weeksMap
    • QStringList hoursMap → std::array<QString, 24> hoursMap
    • QMap<int, QString> yearsMap → std::array<QString, 16> yearsArray + int startYear
  • 添加了默认构造函数声明
  • 移除了 createDefaultReplaceModel 函数声明

2. scene/ViewModels.cpp

  • 添加了 DateItemModel 默认构造函数,用于初始化所有数组成员
  • 移除了 createDefaultReplaceModel() 函数定义
  • 修改了 loadFromXml() 函数,适配新的年份数组结构
  • 修改了 saveToXml() 函数,适配新的年份数组结构

3. DateVarSet.cpp

  • 修改 dateModel() 函数,使用循环在 QStringList 和 std::array 之间复制数据
  • 修改 setDateModel() 函数,使用循环在 std::array 和 QStringList 之间复制数据

4. scene/DateReplaceEditor.cpp

  • 修改 dateModel() 函数,使用循环在 QStringList 和 std::array 之间复制数据
  • 修改 setDateModel() 函数,使用循环在 std::array 和 QStringList 之间复制数据

5. scene/BarcodeEditor.cpp

  • 修改检查空值的逻辑(从 .isEmpty() 改为检查第一个元素)
  • 修改数组赋值逻辑,使用循环逐个元素赋值
  • 更新了所有使用 yearsMap 的地方,改为使用新的 yearsArray 和 startYear 结构

6. scene/ItemCommon.cpp

  • 更新了年份映射访问逻辑,适配新的 yearsArray 和 startYear 结构

性能改进

  • 提高了类型安全性:编译时检查数组大小
  • 提高了缓存友好性:连续内存布局
  • 提高了访问性能:直接内存访问,无间接寻址
  • 保持了兼容性:接口不变,仅内部实现改变

注意事项

  • DateItemModel 对象大小从约 160 字节增加到约 2.2KB
  • 但在实际使用场景中,此大小的复制性能影响微乎其微
  • 移动语义仍然可用,且性能表现良好