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

51 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
- 但在实际使用场景中,此大小的复制性能影响微乎其微
- 移动语义仍然可用,且性能表现良好