Skip to content

Latest commit

 

History

History
76 lines (55 loc) · 6.96 KB

File metadata and controls

76 lines (55 loc) · 6.96 KB

工具箱重构与验证

设计与范围

应用改为工具箱:首页负责发现工具,左侧提供工具入口,底部设置管理应用偏好、共享服务和工具专属参数。首次启动直接使用默认配置,快捷键显式展示;仅当 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 存储沿用已有配置机制,未改为系统凭据存储。

构建与 JPEG ABI

完整验证发现 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,放在构建目录,仅作测试。发布目录没有擅自替换用户的语言包;缺少语言包时在首次使用中配置即可。