#ifndef MODELSETTINGSDIALOG_H #define MODELSETTINGSDIALOG_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct ModelConfig { QString name; QString modelPath; QString tokensPath; QString lexiconPath; QString dictDirPath; QString dataDirPath; bool isEnabled; QString description; }; class ModelSettingsDialog : public QDialog { Q_OBJECT public: explicit ModelSettingsDialog(QWidget* parent = nullptr); ~ModelSettingsDialog(); // 获取当前配置 ModelConfig getCurrentOfflineASRConfig() const; ModelConfig getCurrentOnlineASRConfig() const; ModelConfig getCurrentKWSConfig() const; ModelConfig getCurrentTTSConfig() const; // 设置当前配置 void setCurrentOfflineASRConfig(const ModelConfig& config); void setCurrentOnlineASRConfig(const ModelConfig& config); void setCurrentKWSConfig(const ModelConfig& config); void setCurrentTTSConfig(const ModelConfig& config); // KWS参数获取和设置 struct KWSParams { float threshold = 0.25f; // 关键词阈值 int maxActivePaths = 8; // 最大活跃路径数 int numTrailingBlanks = 2; // 尾随空白数 float keywordsScore = 1.5f; // 关键词分数权重 int numThreads = 2; // 线程数 }; KWSParams getCurrentKWSParams() const; void setCurrentKWSParams(const KWSParams& params); signals: void modelsChanged(); private slots: void browseOfflineASRModel(); void browseOfflineASRTokens(); void browseOnlineASRModel(); void browseOnlineASRTokens(); void browseKWSModel(); void browseKWSTokens(); void browseKWSKeywords(); void browseTTSModel(); void browseTTSTokens(); void browseTTSLexicon(); void browseTTSDictDir(); void browseTTSDataDir(); void onOfflineASRModelChanged(); void onOnlineASRModelChanged(); void onKWSModelChanged(); void onTTSModelChanged(); void testOfflineASRModel(); void testOnlineASRModel(); void testKWSModel(); void testTTSModel(); void saveSettings(); void loadSettings(); void resetToDefaults(); void scanForModels(); // KWS参数相关槽函数 void onKWSParamsChanged(); void resetKWSParams(); void validateKWSParams(); private: void setupUI(); void setupOfflineASRTab(); void setupOnlineASRTab(); void setupKWSTab(); void setupTTSTab(); void setupAdvancedTab(); void connectSignals(); void updateOfflineASRModelInfo(); void updateOnlineASRModelInfo(); void updateKWSModelInfo(); void updateTTSModelInfo(); bool validateOfflineASRConfig() const; bool validateOnlineASRConfig() const; bool validateKWSConfig() const; bool validateTTSConfig() const; QString getDefaultDataPath() const; QStringList scanForOfflineASRModels() const; QStringList scanForOnlineASRModels() const; QStringList scanForKWSModels() const; QStringList scanForTTSModels() const; // UI组件 QTabWidget* tabWidget; // 离线ASR标签页 QWidget* offlineAsrTab; QLineEdit* offlineAsrModelPathEdit; QLineEdit* offlineAsrTokensPathEdit; QComboBox* offlineAsrModelCombo; QTextEdit* offlineAsrModelInfoEdit; QPushButton* testOfflineASRBtn; // 在线ASR标签页 QWidget* onlineAsrTab; QLineEdit* onlineAsrModelPathEdit; QLineEdit* onlineAsrTokensPathEdit; QComboBox* onlineAsrModelCombo; QTextEdit* onlineAsrModelInfoEdit; QPushButton* testOnlineASRBtn; // 语音唤醒标签页 QWidget* kwsTab; QLineEdit* kwsModelPathEdit; QLineEdit* kwsTokensPathEdit; QLineEdit* kwsKeywordsPathEdit; QComboBox* kwsModelCombo; QTextEdit* kwsModelInfoEdit; QPushButton* testKWSBtn; // KWS参数设置控件 QGroupBox* kwsParamsGroup; QLineEdit* kwsThresholdEdit; // 关键词阈值 QLineEdit* kwsMaxActivePathsEdit; // 最大活跃路径数 QLineEdit* kwsTrailingBlanksEdit; // 尾随空白数 QLineEdit* kwsKeywordsScoreEdit; // 关键词分数权重 QLineEdit* kwsNumThreadsEdit; // 线程数 QPushButton* kwsResetParamsBtn; // 重置参数按钮 // TTS标签页 QWidget* ttsTab; QLineEdit* ttsModelPathEdit; QLineEdit* ttsTokensPathEdit; QLineEdit* ttsLexiconPathEdit; QLineEdit* ttsDictDirPathEdit; QLineEdit* ttsDataDirPathEdit; QComboBox* ttsModelCombo; QTextEdit* ttsModelInfoEdit; QPushButton* testTTSBtn; // 高级设置标签页 QWidget* advancedTab; QLineEdit* dataPathEdit; QCheckBox* autoScanCheckBox; QCheckBox* enableLoggingCheckBox; // 按钮 QPushButton* saveBtn; QPushButton* cancelBtn; QPushButton* resetBtn; QPushButton* scanBtn; // 设置存储 QSettings* settings; }; #endif // MODELSETTINGSDIALOG_H