parent
b20c5ad72d
commit
c651f19d89
@ -0,0 +1,2 @@
|
|||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
@ -0,0 +1,121 @@
|
|||||||
|
#ifndef INTELLIGENCEUI_H
|
||||||
|
#define INTELLIGENCEUI_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QProcess>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QTextEdit>
|
||||||
|
#include <QProgressBar>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QMediaRecorder>
|
||||||
|
#include <QAudioRecorder>
|
||||||
|
#include <QAudioInput>
|
||||||
|
#include <QAudioFormat>
|
||||||
|
#include <QUrl>
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
namespace Ui {
|
||||||
|
class IntelligenceUI;
|
||||||
|
}
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class IntelligenceUI : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
IntelligenceUI(QWidget *parent = nullptr);
|
||||||
|
~IntelligenceUI();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
// 播放音频按钮
|
||||||
|
void on_playSelectedAudio_clicked();
|
||||||
|
|
||||||
|
// 杀死wsaudio进程按钮
|
||||||
|
void on_killWSAudio_clicked();
|
||||||
|
|
||||||
|
// 刷新音频文件列表
|
||||||
|
void on_refreshAudioList_clicked();
|
||||||
|
|
||||||
|
// 保存SSH连接设置
|
||||||
|
void on_saveSshSettings_clicked();
|
||||||
|
|
||||||
|
// 上传并播放
|
||||||
|
void on_browseButton_clicked();
|
||||||
|
void on_uploadAndPlayButton_clicked();
|
||||||
|
void onFileUploadFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
||||||
|
|
||||||
|
// SSH进程处理
|
||||||
|
void onSshProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
||||||
|
void onSshProcessError(QProcess::ProcessError error);
|
||||||
|
|
||||||
|
// 新增录制功能相关槽函数
|
||||||
|
void on_recordButton_clicked();
|
||||||
|
void on_stopRecordButton_clicked();
|
||||||
|
void on_playRecordedButton_clicked();
|
||||||
|
|
||||||
|
// 录制相关处理
|
||||||
|
void onRecordingFinished();
|
||||||
|
void onRecordingError(QMediaRecorder::Error error);
|
||||||
|
void updateAudioLevel();
|
||||||
|
|
||||||
|
// 新增TTS功能相关槽函数
|
||||||
|
void on_generateTtsButton_clicked();
|
||||||
|
void on_playTtsButton_clicked();
|
||||||
|
void onTtsGenerationFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::IntelligenceUI *ui;
|
||||||
|
QProcess *sshProcess;
|
||||||
|
QProcess *fileTransferProcess;
|
||||||
|
QString currentCommand;
|
||||||
|
|
||||||
|
// SSH连接信息
|
||||||
|
QString m_sshHost;
|
||||||
|
QString m_sshUser;
|
||||||
|
QString m_sshPassword;
|
||||||
|
|
||||||
|
// 本地文件路径
|
||||||
|
QString m_localAudioPath;
|
||||||
|
|
||||||
|
// 录制相关
|
||||||
|
QAudioRecorder *audioRecorder;
|
||||||
|
QAudioInput *audioInput;
|
||||||
|
QTimer *volumeTimer;
|
||||||
|
QString recordedFilePath;
|
||||||
|
|
||||||
|
// TTS相关
|
||||||
|
QProcess *ttsProcess;
|
||||||
|
QString ttsOutputPath;
|
||||||
|
|
||||||
|
// 核心方法
|
||||||
|
void executeSSHCommand(const QString &command, const QString &description);
|
||||||
|
//qxq:
|
||||||
|
void killWSAudioProcess();
|
||||||
|
void playAudioFile(const QString &audioFile);
|
||||||
|
void refreshAudioFileList();
|
||||||
|
void updateSshSettings();
|
||||||
|
|
||||||
|
// UI设置
|
||||||
|
void setupUI();
|
||||||
|
void updateStatus(const QString &message, bool isError = false);
|
||||||
|
|
||||||
|
// 录制相关私有方法
|
||||||
|
void setupAudioRecorder();
|
||||||
|
void updateRecordingStatus(const QString &status);
|
||||||
|
void enableRecordingControls(bool recording);
|
||||||
|
|
||||||
|
// TTS相关私有方法
|
||||||
|
void setupTTS();
|
||||||
|
void updateTtsStatus(const QString &status);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // INTELLIGENCEUI_H
|
@ -0,0 +1,2 @@
|
|||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
@ -0,0 +1,634 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>IntelligenceUI</class>
|
||||||
|
<widget class="QMainWindow" name="IntelligenceUI">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>900</width>
|
||||||
|
<height>800</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>情报传达系统 - UnitreeGo1</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QMainWindow {
|
||||||
|
background-color: rgb(24, 33, 45);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton {
|
||||||
|
background-color: rgb(30, 44, 62);
|
||||||
|
color: rgb(220, 230, 240);
|
||||||
|
border: 2px solid rgba(82, 194, 242, 0.5);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 12px 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
min-height: 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:hover {
|
||||||
|
background-color: rgb(50, 70, 95);
|
||||||
|
border: 2px solid rgba(82, 194, 242, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:pressed {
|
||||||
|
background-color: rgb(40, 60, 85);
|
||||||
|
border: 2px solid rgba(82, 194, 242, 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
QLabel {
|
||||||
|
color: rgb(220, 230, 240);
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QComboBox {
|
||||||
|
background-color: rgb(30, 44, 62);
|
||||||
|
color: rgb(220, 230, 240);
|
||||||
|
border: 2px solid rgba(82, 194, 242, 0.5);
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextEdit {
|
||||||
|
background-color: rgb(15, 22, 32);
|
||||||
|
color: rgb(220, 230, 240);
|
||||||
|
border: 2px solid rgba(82, 194, 242, 0.3);
|
||||||
|
border-radius: 5px;
|
||||||
|
font-family: "Courier New", monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QProgressBar {
|
||||||
|
border: 2px solid rgba(82, 194, 242, 0.5);
|
||||||
|
border-radius: 5px;
|
||||||
|
text-align: center;
|
||||||
|
background-color: rgb(30, 44, 62);
|
||||||
|
color: rgb(220, 230, 240);
|
||||||
|
}
|
||||||
|
|
||||||
|
QProgressBar::chunk {
|
||||||
|
background-color: rgba(82, 194, 242, 0.8);
|
||||||
|
border-radius: 3px;
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>20</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>20</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>20</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="titleLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>🔊 情报传达系统</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QLabel {
|
||||||
|
color: rgb(82, 194, 242);
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 20px;
|
||||||
|
background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
|
||||||
|
stop:0 rgba(82, 194, 242, 0.1),
|
||||||
|
stop:1 rgba(45, 120, 180, 0.1));
|
||||||
|
border: 2px solid rgba(82, 194, 242, 0.3);
|
||||||
|
border-radius: 10px;
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="sshSettingsGroup">
|
||||||
|
<property name="title">
|
||||||
|
<string>SSH 连接设置</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QGroupBox {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: rgb(220, 230, 240);
|
||||||
|
border: 1px solid rgba(82, 194, 242, 0.4);
|
||||||
|
border-radius: 8px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QGroupBox::title {
|
||||||
|
subcontrol-origin: margin;
|
||||||
|
subcontrol-position: top center;
|
||||||
|
padding: 0 10px;
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="labelIp">
|
||||||
|
<property name="text">
|
||||||
|
<string>目标 IP:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="lineEditIp">
|
||||||
|
<property name="text">
|
||||||
|
<string>192.168.123.13</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="labelUsername">
|
||||||
|
<property name="text">
|
||||||
|
<string>用户名:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="lineEditUsername">
|
||||||
|
<property name="text">
|
||||||
|
<string>unitree</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="labelPassword">
|
||||||
|
<property name="text">
|
||||||
|
<string>密码:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLineEdit" name="lineEditPassword">
|
||||||
|
<property name="text">
|
||||||
|
<string>123</string>
|
||||||
|
</property>
|
||||||
|
<property name="echoMode">
|
||||||
|
<enum>QLineEdit::Password</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="saveSshSettings">
|
||||||
|
<property name="text">
|
||||||
|
<string>保存并应用设置</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="deviceLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>当前目标: 192.168.123.13 (UnitreeGo1)</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">color: rgb(160, 170, 180); font-size: 16px;</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="audioSelectionLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="audioLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>选择音频文件:</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">font-size: 16px; font-weight: bold;</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="audioComboBox">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>200</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>warning.wav</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>alert.wav</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>emergency.wav</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>notification.wav</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="refreshAudioList">
|
||||||
|
<property name="text">
|
||||||
|
<string>刷新列表</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="controlButtonsLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="playSelectedAudio">
|
||||||
|
<property name="text">
|
||||||
|
<string>🔊 播放选定音频</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QPushButton {
|
||||||
|
background-color: rgb(45, 125, 65);
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:hover {
|
||||||
|
background-color: rgb(65, 145, 85);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:pressed {
|
||||||
|
background-color: rgb(55, 135, 75);
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="killWSAudio">
|
||||||
|
<property name="text">
|
||||||
|
<string>🔧 解除音频占用</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QPushButton {
|
||||||
|
background-color: rgb(165, 85, 45);
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:hover {
|
||||||
|
background-color: rgb(185, 105, 65);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:pressed {
|
||||||
|
background-color: rgb(175, 95, 55);
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="uploadAudioGroup">
|
||||||
|
<property name="title">
|
||||||
|
<string>自定义音频制作</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="recordLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>🎤 录制语音:</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">font-size: 14px; font-weight: bold; color: rgb(82, 194, 242);</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="recordLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="recordButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>🎤 开始录制</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QPushButton {
|
||||||
|
background-color: rgb(45, 125, 65);
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:hover {
|
||||||
|
background-color: rgb(65, 145, 85);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:pressed {
|
||||||
|
background-color: rgb(55, 135, 75);
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="stopRecordButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>⏹ 停止录制</string>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QPushButton {
|
||||||
|
background-color: rgb(165, 85, 45);
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:hover {
|
||||||
|
background-color: rgb(185, 105, 65);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:pressed {
|
||||||
|
background-color: rgb(175, 95, 55);
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="playRecordedButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>▶ 试听录音</string>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="recordStatusLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>录制状态: 就绪</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">color: rgb(160, 170, 180); font-size: 12px;</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QProgressBar" name="volumeMeter">
|
||||||
|
<property name="maximum">
|
||||||
|
<number>100</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="textVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QProgressBar {
|
||||||
|
border: 1px solid rgba(82, 194, 242, 0.5);
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: rgb(30, 44, 62);
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
QProgressBar::chunk {
|
||||||
|
background-color: rgba(45, 200, 45, 0.8);
|
||||||
|
border-radius: 2px;
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="orLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>或者</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">color: rgb(160, 170, 180); font-size: 12px; margin: 10px;</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="ttsLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>🗣 文字转语音:</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">font-size: 14px; font-weight: bold; color: rgb(82, 194, 242);</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QTextEdit" name="ttsTextEdit">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>80</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>输入要转换为语音的文字内容...</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(30, 44, 62); border: 1px solid rgba(82, 194, 242, 0.3); border-radius: 3px; padding: 5px;</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="ttsLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="voiceComboBox">
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(30, 44, 62); border: 1px solid rgba(82, 194, 242, 0.3); border-radius: 3px; padding: 3px;</string>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>标准女声</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>标准男声</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>儿童声</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="generateTtsButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>🎵 生成语音</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QPushButton {
|
||||||
|
background-color: rgb(85, 125, 165);
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:hover {
|
||||||
|
background-color: rgb(105, 145, 185);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPushButton:pressed {
|
||||||
|
background-color: rgb(95, 135, 175);
|
||||||
|
}</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="playTtsButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>▶ 试听TTS</string>
|
||||||
|
</property>
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="ttsStatusLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>TTS状态: 就绪</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">color: rgb(160, 170, 180); font-size: 12px;</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="orLabel2">
|
||||||
|
<property name="text">
|
||||||
|
<string>或者</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">color: rgb(160, 170, 180); font-size: 12px; margin: 10px;</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="uploadLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>📁 上传文件:</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">font-size: 14px; font-weight: bold; color: rgb(82, 194, 242);</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="uploadFileLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="filePathLineEdit">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>请选择一个.wav音频文件...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="browseButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>浏览...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="uploadAndPlayButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>⬆️ 上传并播放</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QProgressBar" name="progressBar">
|
||||||
|
<property name="value">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="textVisible">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="logLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>执行日志:</string>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">font-size: 16px; font-weight: bold;</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QTextEdit" name="logTextEdit">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>200</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menubar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>900</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -0,0 +1,2 @@
|
|||||||
|
[ZoneTransfer]
|
||||||
|
ZoneId=3
|
Binary file not shown.
Loading…
Reference in new issue