From c04af35b88e484963d937c44521243e449e8f27f Mon Sep 17 00:00:00 2001 From: impressionyang Date: Fri, 12 Jun 2026 09:44:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=89=E5=A4=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Windows 重启使用 QProcess::startDetached 直接启动,移除 cmd /c start 方案,避免路径引号导致找不到程序的问题 2. 使用说明改为可调整大小、可滚动的 QDialog + QTextBrowser, 替代固定大小的 QMessageBox 3. 使用说明中默认语音快捷键从 F8 更新为长按 CapsLock Co-Authored-By: Claude Opus 4.7 --- src/ui/main_window.cpp | 61 +++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/src/ui/main_window.cpp b/src/ui/main_window.cpp index fd9b969..8d3139e 100644 --- a/src/ui/main_window.cpp +++ b/src/ui/main_window.cpp @@ -24,7 +24,10 @@ #include #include #include +#include +#include #include +#include #ifdef Q_OS_WIN #include @@ -331,13 +334,11 @@ void MainWindow::doRestart() { } QString appPath = qApp->applicationFilePath(); -#ifdef Q_OS_WIN - // Windows 使用 cmd /c start 启动,避免阻塞 - QProcess::startDetached("cmd", {"/c", "start", "", "\"" + appPath + "\""}); -#else - QProcess::startDetached(appPath, {}); -#endif - + QString workDir = qApp->applicationDirPath(); + bool ok = QProcess::startDetached(appPath, {}, workDir); + if (!ok) { + LOG_ERROR(kTag, QString("重启失败: 无法启动 %1").arg(appPath)); + } qApp->quit(); } @@ -351,7 +352,7 @@ void MainWindow::showUsage() { "

二、快捷键操作

" "" - "" + "" "" "" "" @@ -360,11 +361,12 @@ void MainWindow::showUsage() { "

三、语音输入使用流程

" "
    " "
  1. 配置页面中设置正确的 STT 模型路径并保存。
  2. " - "
  3. 设置语音输入快捷键(如 F8)。
  4. " + "
  5. 设置语音输入快捷键(默认长按 CapsLock)。
  6. " "
  7. 将光标定位到需要输入文字的目标应用(如微信、Word、浏览器等)。
  8. " - "
  9. 按下快捷键开始说话,说完后再次按下快捷键停止。
  10. " + "
  11. 长按快捷键开始说话,说完后松开快捷键。
  12. " "
  13. 识别的文字将通过模拟按键自动输入到目标应用中。
  14. " "
" + "

CapsLock 工作模式:短按(<1 秒)正常切换大小写锁定;长按(>1 秒)触发语音输入,松开后自动识别并注入文字。

" "

四、文件转写使用流程

" "
    " @@ -404,18 +406,41 @@ void MainWindow::showUsage() { "

    八、常见问题

    " "

    Q: 语音输入没有反应?
    " - "A: 请确认:① 模型已加载(状态栏显示模型已就绪);② 已设置语音快捷键;③ 麦克风正常工作。

    " + "A: 请确认:① 模型已加载(状态栏显示模型已就绪);" + "② 已设置语音快捷键;③ 麦克风正常工作。

    " "

    Q: 识别文字没有输入到目标应用?
    " "A: 某些应用可能拦截模拟按键输入,请尝试在管理员权限下运行本程序。

    " "

    Q: 识别速度慢?
    " - "A: 在配置中增大 ONNX 线程数,或使用 GPU 版本的 ONNX Runtime。

    "; + "A: 在配置中增大 ONNX 线程数,或使用 GPU 版本的 ONNX Runtime。

    " + "

    Q: CapsLock 短按不起作用?
    " + "A: 请确保按键时间小于 1 秒,超过 1 秒会触发语音输入模式。

    "; - QMessageBox msgBox(this); - msgBox.setWindowTitle("使用说明"); - msgBox.setTextFormat(Qt::RichText); - msgBox.setText(usageText); - msgBox.setIcon(QMessageBox::Information); - msgBox.exec(); + // 使用可调整大小、可滚动的 QDialog 替代 QMessageBox + QDialog* dialog = new QDialog(this); + dialog->setWindowTitle("使用说明"); + dialog->resize(650, 550); + dialog->setMinimumSize(400, 300); + + auto* layout = new QVBoxLayout(dialog); + layout->setContentsMargins(12, 12, 12, 12); + + auto* textBrowser = new QTextBrowser(dialog); + textBrowser->setOpenExternalLinks(false); + textBrowser->setHtml(usageText); + layout->addWidget(textBrowser); + + // 底部关闭按钮 + auto* btnLayout = new QHBoxLayout(); + btnLayout->addStretch(); + auto* closeBtn = new QPushButton("关闭", dialog); + closeBtn->setMinimumWidth(80); + btnLayout->addWidget(closeBtn); + layout->addLayout(btnLayout); + + connect(closeBtn, &QPushButton::clicked, dialog, &QDialog::accept); + + dialog->exec(); + dialog->deleteLater(); } void MainWindow::updateModelStatus() {
语音输入默认 F8(可在配置中自定义)
语音输入长按 CapsLock 超过 1 秒(可在配置中自定义)
使用说明F1
重启应用Ctrl+R
退出应用Ctrl+Q