impress_voice_input/src/ui/settings_page.h
impressionyang 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

76 lines
1.5 KiB
C++

#pragma once
#include <QWidget>
class QFormLayout;
class QLineEdit;
class QComboBox;
class QSpinBox;
class QDoubleSpinBox;
class QCheckBox;
class QPushButton;
class QLabel;
class QGroupBox;
namespace impress {
class ConfigManager;
class HotkeyRecorder;
/**
* @brief 配置页面
*
* 管理模型路径、推理参数、音频设置等。
*/
class SettingsPage : public QWidget {
Q_OBJECT
public:
explicit SettingsPage(ConfigManager* configManager, QWidget* parent = nullptr);
~SettingsPage() override;
private slots:
void onBrowseModelPath();
void onBrowseTokensPath();
void onSaveConfig();
void onResetConfig();
private:
void setupUI();
void loadFromConfig();
void saveToConfig();
ConfigManager* configManager_;
// STT 设置
QLineEdit* modelPathEdit_;
QPushButton* browseBtn_;
QLineEdit* tokensPathEdit_;
QPushButton* tokensBrowseBtn_;
QComboBox* modelTypeCombo_;
QComboBox* deviceCombo_;
QSpinBox* threadSpin_;
QSpinBox* sampleRateSpin_;
QComboBox* languageCombo_;
QCheckBox* streamingCheck_;
QCheckBox* debugSaveAudioCheck_;
HotkeyRecorder* hotkeyRecorder_;
QSpinBox* beamSizeSpin_;
QDoubleSpinBox* temperatureSpin_;
// 音频设置
QSpinBox* bufferSizeSpin_;
QSpinBox* chunkDurationSpin_;
QSpinBox* paddingSpin_;
// UI 设置
QComboBox* themeCombo_;
QSpinBox* fontSizeSpin_;
QCheckBox* showWaveformCheck_;
QCheckBox* showConfidenceCheck_;
// 状态
QLabel* statusLabel_;
};
} // namespace impress