2.4 KiB
2.4 KiB
DateItemModel 修改总结
修改概述
已成功将 DateItemModel 中的 QStringList 成员变量替换为 std::array<QString, N> 以提高类型安全性和访问性能。
修改的文件
1. scene/ViewModels.h
- 添加了
#include <array> - 将
QStringList成员变量替换为std::array<QString, N>:QStringList dataMap→std::array<QString, 16> dataMapQStringList daysMap→std::array<QString, 31> daysMapQStringList monthsMap→std::array<QString, 12> monthsMapQStringList weeksMap→std::array<QString, 7> weeksMapQStringList hoursMap→std::array<QString, 24> hoursMapQMap<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- 但在实际使用场景中,此大小的复制性能影响微乎其微
- 移动语义仍然可用,且性能表现良好