51 lines
2.4 KiB
Markdown
51 lines
2.4 KiB
Markdown
# 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
|
||
- 但在实际使用场景中,此大小的复制性能影响微乎其微
|
||
- 移动语义仍然可用,且性能表现良好 |