应用改为工具箱:首页负责发现工具,左侧提供工具入口,底部设置管理应用偏好、共享服务和工具专属参数。首次启动直接使用默认配置,快捷键显式展示;仅当 OCR 或 AI 翻译缺少依赖时导航到相应设置。截图输入会暂存,保存后继续;文本翻译保留编辑内容,配置后由用户再次开始。
现有截图、取色、贴图、OCR、翻译保留。视频/音频转换、下载器、网络调试等没有伪装成可用功能,后续按模块接入。当前是内置模块结构,不引入动态插件加载、额外进程或无实际用途的服务容器。
src/ui/main_window.*:应用窗口、工具导航、首页、关闭策略。src/ui/tool_definition.h:内置工具的稳定 ID、标题、描述、图标、页面工厂;首页与侧栏使用同一份描述。src/translate/translation_page.*:文本翻译页面、分栏、提示词、异步任务;配置需求通过信号交给窗口处理。src/application.*:托盘、快捷键、截图结果分发、功能前置配置、统一退出。src/ui/settings_view.*:应用 / 共享服务 / 截图 / 翻译分类树、分类搜索与稳定 ID 定位;保留已有配置字段与重置机制。src/ocr/ocr_engine.*:每个识别任务使用独立引擎,配置不会被另一任务重置。src/diagnostics/regression_checks.*:离线回归入口,不持久化用户设置、不发送真实 AI 请求。
新增工具:实现独立 QWidget 页面,在窗口的工具描述表注册;对应设置页按所属工具分组注册。随着工具增加,再把 SettingsView 中各组的控件和数据绑定拆为模块,不需要提前改变用户配置文件格式。
兼容旧 app_mode:translate 对应打开工具箱,screenshot 对应后台启动。它只决定启动方式,不再改变各工具能力或保存设置时突然隐藏窗口。旧 SetupWizard 保留作历史视觉测试,生产启动不再调用。
| 问题 | 处理 |
|---|---|
| 取消关闭后重复弹窗 | 接管 Ela 标题栏关闭,异步单入口处理关闭事件;防止重入 |
| 关闭弹窗过高、空白失衡 | 紧凑内容、横排取消/退出/后台按钮、固定逻辑尺寸,跟随 Qt DPI 缩放 |
| 取消退出也取消翻译 | 只有确定退出时取消任务,隐藏到托盘保持任务运行 |
| 托盘退出再次询问主窗口、甚至取消无效 | 窗口和托盘确认后汇入统一 shutdown,不再调用主窗口 close |
| 启动方式下拉没有数据值,保存得到空模式 | 为显示文案绑定稳定的 translate/screenshot 值 |
| 旧启动模式决定关闭行为、保存设置突然隐藏 | 关闭策略独立;启动模式仅控制下次启动 |
| 截图会话析构时 close 信号将成员清空后继续解引用 | 先取局部指针、断开连接再关闭销毁 |
| 空裁剪区域返回整张屏幕 | 裁剪交集为空时直接返回空图 |
| OCR 并发初始化串用语言/目录 | 各任务独立引擎;缓存复用同时校验目录 |
| 语言包路径缓存不刷新 | 每次重新扫描,安装后立即可用 |
| OCR 目录变更/放弃修改后语言列表不同步 | 重载目录和勾选状态;目录变更时取消旧下载 |
| 语言列表重建丢失未保存勾选 | 勾选实时维护独立选中集合 |
| 设置写入失败仍显示成功 | QSaveFile 原子写入、返回结果,UI 失败回滚内存并提示 |
| 恢复默认配置目录仍指向旧目录 | 清理旧 bootstrap 指向;全部重置保留当前存储位置 |
| 模型获取失败清空已有模型、把错误提示存成模型名 | 保留当前模型;错误仅显示在提示区域 |
SSE 只接受 data: ,不接受合法的 data: |
两条解析路径均接受可选空格 |
| 热键注册失败遗留隐藏窗口 | 清理 Win32 窗口与注册类;注册结果使用原子状态 |
| 无系统托盘时后台启动无入口 | 回退显示工具箱;禁止隐藏到不可用托盘 |
| 视觉测试间接写入真实配置 | 测试 Settings 实例禁用持久化 |
在仓库根目录运行构建后的 SnapLens.exe --regression-checks。
英文 OCR 测试需要在测试可执行程序的 tessdata/eng.traineddata 放入官方 tessdata_fast 英文模型;它只作为测试数据,不包含在 Git 中。
回归截图与 results.txt 输出到 cmake-build-release-visual-studio/regression/。
覆盖标题栏取消、普通 close、记住退出/后台选择、设置分类、设置保存失败、越界/高 DPI 裁剪、真实屏幕会话启动与重复关闭、英文 OCR 实际识别及目录切换失败、本地 HTTP 模拟的 JSON/SSE/401/取消。检查大窗口深色与小窗口浅色截图。
已有 --ui-smoke-dialogs 和 --ui-snapshot-dir=<目录> 入口继续可用;全部设置快照不再改写配置。
多显示器混合 DPI 边界、不同 AI 服务商实际模型响应、真实语言包下载的网络中断与代理、长时间 OCR 任务退出、受限目录/磁盘故障下多文件配置迁移,需要对应环境验证。API 测试使用本机模拟服务器,不能代表线上服务商已验证。当前 AI Key 存储沿用已有配置机制,未改为系统凭据存储。
完整验证发现 Qt 6.11.2 全静态版本与当前 Tesseract SDK 同时提供不同 ABI 的 JPEG 符号。Ela 加载内置 JPEG 头像时出现 Wrong JPEG library version: library is 62, caller expects 80 并崩溃;链接成功不能代表此组合可运行。
此问题已解决:默认恢复 Qt 6.11.2 静态构建,将同版本 Qt JPEG 插件源码按 OCR SDK 的 ABI 62 重新编译,排除 Qt 原有 ABI 80 插件,统一链接 SDK jpeg.lib。Qt、Tesseract 和 MSVC CRT 均静态链接,JPG 功能保留。见 静态构建说明。
以下是此前共享版记录;最新静态版构建、JPEG 双向互通、OCR 与完整回归均已通过,详见静态构建说明。
- 全新 Release 构建:
cmake-build-toolbox,MSVC 19.51、Qt 6.11.1 共享库、仓库内嵌 ElaWidgetTools,成功。 --regression-checks:通过。设置的测试实例禁用持久化,网络仅访问本地模拟服务。dist/SnapLens.exe --ui-smoke-dialogs:仅保留 Windows 系统 PATH 时通过,确认打包后的 Qt 运行库可被找到。- 已查看深色首页/设置/关闭弹窗及 900×600 逻辑尺寸浅色设置/翻译截图;修复分类树主题颜色、窄窗口字段裁切、翻译工具栏文字竖排。窄窗口自动收起工具侧栏,设置卡片将控件移至说明下方。
git diff --check按仓库 CRLF 规则检查通过;构建仍有来自第三方 Qt/Ela 的警告。
英文 OCR 测试数据来源:tesseract-ocr/tessdata_fast 的 eng.traineddata,放在构建目录,仅作测试。发布目录没有擅自替换用户的语言包;缺少语言包时在首次使用中配置即可。