impress_voice_input/src/ui/main_window.h
impressionyang 0068dda47f feat: 重构菜单并添加使用说明
文件菜单:只保留重启(Ctrl+R)和退出(Ctrl+Q)
托盘菜单:增加重启选项(显示主窗口 / 重启 / 退出)
帮助菜单:增加使用说明(F1),包含基本功能、快捷键、使用流程、
          配置说明、系统托盘、状态栏、常见问题等详细说明
2026-06-12 09:38:09 +08:00

66 lines
1.6 KiB
C++

#pragma once
#include <QMainWindow>
#include <QTabWidget>
#include <memory>
class QLabel;
class QSystemTrayIcon;
class QMenu;
class QIcon;
namespace impress {
class ConfigManager;
class SenseVoiceEngine;
class STTTestPage;
class FileTranscribePage;
class SettingsPage;
class VoiceInputService;
/**
* @brief 主窗口
*
* 使用 Tab 页导航管理三个功能页面,共享全局 STT 引擎。
* 状态栏显示模型名称和加载状态。
*/
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(ConfigManager* configManager,
SenseVoiceEngine* sttEngine,
QWidget* parent = nullptr);
~MainWindow() override;
protected:
void closeEvent(QCloseEvent* event) override;
private:
void setupUI(SenseVoiceEngine* sttEngine);
void setupMenuBar();
void setupStatusBar(SenseVoiceEngine* sttEngine);
void setupTrayIcon();
void updateTrayIcon(const QString& status);
void loadStyleSheet();
void onVoiceInputConfigChanged();
void updateModelStatus();
void doExit();
void doRestart();
void showUsage();
ConfigManager* configManager_;
SenseVoiceEngine* sttEngine_;
VoiceInputService* voiceInputService_;
STTTestPage* sttPage_;
FileTranscribePage* transcribePage_;
SettingsPage* settingsPage_;
QTabWidget* tabWidget_;
QLabel* modelStatusLabel_;
QSystemTrayIcon* trayIcon_ = nullptr;
QMenu* trayMenu_ = nullptr;
QIcon idleIcon_; // SP_MediaStop — 就绪/停止
QIcon activeIcon_; // SP_MediaPlay — 录音/识别
};
} // namespace impress