修改适配非等宽字体的计数器

This commit is contained in:
2026-08-26 16:23:04 +08:00
parent 950d0d0386
commit 190155913a
10 changed files with 267 additions and 70 deletions
+38 -39
View File
@@ -395,51 +395,50 @@ PicScene (QGraphicsScene) # 场景,管理所有图元
```
### 6.2 作业文件格式
作业文件使用 XML 格式(根元素为 `VBfiles`),由 `PicSceneLoader` 读写。要点如下:
作业文件使用XML格式(VBfiles结构),保存场景内容和打印设置:
- 根元素: `<VBfiles Version="1.0">`(保存时会写入 `Version` 属性及一个简单的 DOCTYPE)。
- 每个图元为一个 `<VBfile>` 节点,常见子元素:
- `<pointer_x>` / `<pointer_y>`: 图元位置(浮点数)
- `<Condition>`: 特殊条件标志,0/1
- `<CatchStartValue>` / `<CatchValue>`: 与 Catch 相关的计数器起始/当前值(整数)
- `<itemAttrs ... />`: 图元属性以属性集合的形式保存(见下),`PicSceneLoader` 通过属性解析并传给具体图元对象
- `<html_src>`: 包裹图元 HTML 表示的 CDATA(编辑器中使用的 HTML 内容)
示例(简化):
```xml
<VBfiles>
<!-- 打印设置 -->
<PrintSettings timeTriggerPrintMode="0" triggerInterval="90" ... />
<!-- 文本图元 -->
<VBfile>
<pointer_x>55</pointer_x>
<pointer_y>0</pointer_y>
...
<itemAttrs sourceType="1" dir="0" letterSpace="1" fontFamilay="WenQuanYi7" source="FGJ" ... />
</VBfile>
<!-- 日期图元 -->
<VBfile>
<pointer_x>55</pointer_x>
<pointer_y>0</pointer_y>
...
<itemAttrs sourceType="3" datetimePattern="HH:mm:ss" ... />
</VBfile>
<!-- 计数器图元 -->
<VBfile>
<pointer_x>83</pointer_x>
<pointer_y>17</pointer_y>
...
<itemAttrs sourceType="6" counter_type="7" digital_num="8" ... />
</VBfile>
<!-- 条码/二维码图元 -->
<VBfile>
<pointer_x>0</pointer_x>
<pointer_y>0</pointer_y>
...
<itemAttrs sourceType="5" dir="0" barcodeContentPattern="dr66re{t}{c}" barcodeType="2" qrcodeFormat="0" ... />
</VBfile>
<!-- 图片图元 -->
<VBfile>
<pointer_x>0</pointer_x>
<pointer_y>0</pointer_y>
...
<itemAttrs sourceType="2" dir="0" source="/home/plg/doc/scene.png" ... />
</VBfile>
<VBfiles Version="1.0">
<VBfile>
<pointer_x>55</pointer_x>
<pointer_y>0</pointer_y>
<Condition>0</Condition>
<CatchStartValue>-1</CatchStartValue>
<CatchValue>-1</CatchValue>
<itemAttrs sourceType="1" dir="0" letterSpace="1" fontFamilay="WenQuanYi7" source="FGJ" />
<html_src><![CDATA[...item html...]]></html_src>
</VBfile>
<!-- 更多 VBfile ... -->
<!-- PrintSettings 以属性形式保存在一个空元素中 -->
<PrintSettings timeTriggerPrintMode="0" triggerInterval="90" ... />
</VBfiles>
```
其他细节:
- `itemAttrs` 中常见属性由各图元实现 `saveAttrs` / `setAttrs` 控制,通用属性包括 `sourceType`(必有)、`dir`、`boldMultiple`、`colorReversal`("true"/"false")、`letterSpace`、`fontFamilay`(注意拼写)以及 `source`(图元内容或图片路径)等。
- `html_src` 使用 CDATA 保存 `toHtml()` 的内容,加载时会把 CDATA 拼接并通过 `setHtml()` 恢复。
- `PrintSettings` 由 `PrintSettingModel::saveToXml`/`loadFromXml` 通过属性读写打印相关配置(保存时作为空元素写出属性)。`PicSceneLoader` 在解析 `VBfiles` 时会识别 `PrintSettings`(位置可以在文件中任意出现,保存实现默认写在所有 `<VBfile>` 之后)。
- 图元类型(`sourceType`)的数值映射(见 `scene/pictextitem.h`):
- `0` = `UNKNOWN`
- `1` = `TEXT`
- `2` = `IMAGE`
- `3` = `DATETIME`
- `4` = `SCHEDULE_SHIFT`
- `5` = `CODE`(一维/二维码)
- `6` = `COUNTER`
该节已根据 `scene/PicSceneLoader.cpp` 的实际实现和 `Printsetting.cpp` 中的读写逻辑做了校正(包含 `Condition`/`Catch*` 字段、`Version` 属性、`html_src` CDATA、以及 `PrintSettings` 的属性化保存)。
### 6.3 关键类说明
- **PicSceneLoader** - 场景文件的加载/保存/预览,负责XML序列化/反序列化