Commit Graph

18 Commits

Author SHA1 Message Date
impressionyang
c04af35b88 fix: 修复三处问题
1. Windows 重启使用 QProcess::startDetached 直接启动,移除 cmd /c start
   方案,避免路径引号导致找不到程序的问题
2. 使用说明改为可调整大小、可滚动的 QDialog + QTextBrowser,
   替代固定大小的 QMessageBox
3. 使用说明中默认语音快捷键从 F8 更新为长按 CapsLock

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-12 09:44:34 +08:00
impressionyang
0068dda47f feat: 重构菜单并添加使用说明
文件菜单:只保留重启(Ctrl+R)和退出(Ctrl+Q)
托盘菜单:增加重启选项(显示主窗口 / 重启 / 退出)
帮助菜单:增加使用说明(F1),包含基本功能、快捷键、使用流程、
          配置说明、系统托盘、状态栏、常见问题等详细说明
2026-06-12 09:38:09 +08:00
impressionyang
165c48c677 fix: 修复 Windows 上 Qt 内部 200x200 工具窗口(空白方块)问题
通过 EnumWindows 枚举并隐藏 Qt 在 Windows 上创建的 WS_EX_TOOLWINDOW
工具窗口(无标题栏、无边框),解决启动时出现的空白方块问题。

同时包含:
- Windows 使用原生 windows 风格替代 Fusion,避免渲染问题
- 托盘图标改为圆形轮廓,AudioWaveform 背景主题适配
- QSS 完善(MenuBar、录音按钮动态属性、StackedWidget 背景)
- 内联样式表改为 objectName/dynamic property,QSS 统一管理
- 日志记录版本信息、编译时间、Qt 版本、平台信息

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-12 09:21:18 +08:00
impressionyang
27bd78bf17 feat: 嵌入应用图标(窗口图标 + Windows exe 图标)
- 使用用户提供的 icon 图片作为应用图标
- Windows: .rc + windres 嵌入 exe 图标(256px 多尺寸 ICO)
- Qt: 窗口图标从 Qt 资源加载 PNG

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 19:20:16 +08:00
impressionyang
6824ce1f4a feat: Windows隐藏启动控制台,关闭按钮改为隐藏到托盘
- CMakeLists.txt: Windows 使用 add_executable WIN32 构建 GUI 程序(无控制台)
- closeEvent: 点击关闭按钮隐藏到托盘而非退出程序
- 托盘菜单已有"显示主窗口"和双击恢复功能

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 19:15:02 +08:00
impressionyang
ae35404d26 feat: 主题切换(light/dark QSS)、QSS资源编译修复、托盘图标主题色
- 新增 main_dark.qss 暗色主题样式表
- 使用 .qrc + add_executable 方式确保 QSS 资源正确编译
- Application::applyTheme 动态切换主题和样式表
- 托盘图标 light 主题黑色、dark 主题白色
- Settings 保存后实时应用主题/字体

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 19:13:34 +08:00
impressionyang
835b9fcdd8 feat: 托盘图标使用 QStyle 标准图标切换状态
- 就绪/停止: SP_MediaStop (■)
- 录音/识别: SP_MediaPlay (▶)

避免自定义绘制导致的黑色方块问题,使用 Qt 原生支持的
系统标准图标,跨平台兼容性好。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 17:27:55 +08:00
impressionyang
3ccdff0828 fix: 修复 CapsLock 重复复位和托盘图标黑色方块
1. 重复复位: onHotkeyDeactivated() 中移除 simulateCapsLock(),
   只保留 onRecognitionComplete() 中的复位调用,确保只复位一次。
   无音频时也调用 simulateCapsLock() 复位。

2. 托盘图标黑色方块: 移除自定义 QPixmap 绘制(在某些平台/主题下
   渲染为黑色方块),改用应用窗口图标 + QStyle::SP_ComputerIcon 回退。
   状态变化通过 tooltip 文字指示,不再切换不同颜色的图标。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 17:14:10 +08:00
impressionyang
04ca41f4c3 fix: 恢复托盘图标状态更新(statusChanged 连接误删)
之前修复按键卡顿时误将 statusChanged 信号连接中的 updateTrayIcon() 调用移除,
导致托盘图标始终显示初始绿色,不随录音/识别状态变化。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 16:18:53 +08:00
impressionyang
8425fb4a04 fix: 修复托盘图标/退出/卡顿 4 个问题
1. 关闭窗口无法退出: closeEvent 改为调用 doExit(),正常执行退出流程
2. 托盘右键无法退出: 统一使用 doExit() → qApp->quit(),与菜单/快捷键退出一致
3. 托盘图标更新慢: 6 个状态图标在 setupTrayIcon() 中预创建缓存,
   updateTrayIcon() 只做 QMap 查找 + setIcon(),避免每次重建 QPixmap
4. 按键识别卡顿/误释放: simulateCapsLock() 在 XTest 模拟前后设置
   CapsLockVoiceHotkey::ignoreEvents_ 标志,屏蔽 portal 的
   Activated/Deactivated 回传信号,防止状态机被打断

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 16:01:00 +08:00
impressionyang
6bf22041f8 fix: 彻底修复 Windows 托盘图标不显示 + 添加版本编译时间日志
Windows 托盘修复:
- 设置 setQuitOnLastWindowClosed(false),关闭主窗口时不退出应用
- 关闭主窗口改为隐藏 (event->ignore()),托盘继续运行
- 托盘菜单"退出"调用 qApp->quit() 真正退出
- 图标简化为 16x16 QImage ARGB32 + 纯色圆,确保 Windows 兼容
- 先设置图标再 trayIcon_->show()
- 添加托盘气泡通知

日志增强:
- 启动日志显示版本号 (v0.1.0)
- 打印编译时间 (__DATE__ __TIME__),方便确认二进制是否更新

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 15:39:00 +08:00
impressionyang
dc2f8e5c4f fix: 修复 Windows 托盘图标不显示问题
- 图标改为不透明深色背景 + 纯色圆形 + 白色符号,避免透明背景兼容性问题
- 图标尺寸从 22 增加到 32
- 添加托盘气泡通知提示用户
- 确保 updateTrayIcon 时检查图标可见性
- 配置 git credential.store 记住凭据

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 15:28:01 +08:00
4836a82cad feat: 添加系统托盘图标,实时指示语音录制状态
托盘图标根据状态变色:绿色(就绪)、黄色(等待确认)、红色(录音中)、
橙色(识别中)。支持双击托盘显示/隐藏主窗口,右键托盘菜单显示窗口和退出。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 15:20:09 +08:00
a2b216092f fix: 修复配置保存死锁,添加快捷键录制组件
- 修复 ConfigManager::set() 在持有锁时发射信号导致的死锁
- 添加 setBatch() 方法批量更新配置,只发射一次 configChanged
- 新增 HotkeyRecorder 组件:点击按钮后按键录制任意快捷键
- SettingsPage 保存配置改为批量写入,避免多次触发服务重启

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 14:49:55 +08:00
6f55ec5780 feat: 添加状态栏显示模型名称和加载状态
主窗口底部状态栏实时显示模型加载状态:
- 已就绪:绿色显示"模型已就绪: <文件名>"
- 路径为空:红色显示"⚠️ 模型路径未设置"
- 加载失败:橙色显示"⚠️ 模型加载失败: <文件名>"

Application 新增 modelLoading 信号和 modelPath() 方法,
配置变化时自动刷新状态栏显示。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 14:19:12 +08:00
ef97b962c3 refactor: 全局共享 STT 模型,避免重复加载
将 SenseVoiceEngine 提升为 Application 级别的全局单例,应用启动时
异步加载一次模型,实时语音识别、文件转写和快捷键语音输入共享同一实例。

- Application 创建并管理全局 SenseVoiceEngine,启动时加载模型
- STTTestPage、FileTranscribePage、VoiceInputService 不再各自
  创建引擎,改为接收全局实例
- 移除各模块中冗余的 loadModel/loadModelAsync/unloadModel 调用
- 模型未加载时提供友好的等待提示,而非加载失败的错误弹窗

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 14:10:31 +08:00
baec3482a7 feat: 集成语音输入服务到主窗口和设置页面
主窗口新增 VoiceInputService 生命周期管理,支持通过配置页面
的开关动态启停 CapsLock 语音输入功能,窗口关闭时自动清理。

设置页面新增两个复选框:
- 调试录音:保存每次识别的原始音频到临时文件夹
- 快捷语音:启用 CapsLock 长按语音输入

转写页面和 STT 测试页面同步配置中的调试音频开关到引擎。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 11:13:15 +08:00
02e100b318 feat: 初始化 Impress Voice Input 项目
基于 ONNX 的实时语音转文本输入法,C++ 跨平台实现。

核心组件:
- Qt 6 跨平台 GUI(实时识别 / 文件转写 / 配置页面)
- ONNX Runtime 推理引擎(异步模型加载)
- PortAudio 音频采集
- dr_libs 音频文件解码
- JSON 配置管理(线程安全,自动持久化)
- 日志系统(控制台 + 文件输出)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-12 15:53:05 +08:00