首次提交

This commit is contained in:
2026-06-16 13:38:08 +08:00
commit ec32ae543d
192 changed files with 13162 additions and 0 deletions
+310
View File
@@ -0,0 +1,310 @@
#include "MainWidget.h"
#include "../component/FrequentShower.h"
#include "../component/TopMenuBar.h"
#include "../menu/BaseWidgetMenu.h"
#include "../subWidget/ServerSettingWidget.h"
#include "IntermediateFrequencyWidget.h"
#include "RadioWidget.h"
#include "SweepFrequencyWidget.h"
#include "YSGraphic_Core/base/export.h"
#include <QScreen>
#include <QTime>
#include "../FileDialog/FileExplorer.h"
MainWidget::MainWidget(QWidget *parent) : QWidget(parent) {
setFocusPolicy(Qt::FocusPolicy::NoFocus);
setObjectName("主界面");
audioRecorder = new QAudioRecorder(this);
audioRecorder->setAudioInput(audioRecorder->defaultAudioInput());
QAudioEncoderSettings audioSettings;
audioSettings.setCodec("audio/pcm");
audioSettings.setQuality(QMultimedia::HighQuality);
audioSettings.setSampleRate(44100); // 设置采样率
audioSettings.setChannelCount(2); // 设置立体声
audioRecorder->setAudioSettings(audioSettings);
mediaPlayer = new QMediaPlayer(this);
mMainLayout = new QVBoxLayout(this);
mMainLayout->setMargin(8);
mMainLayout->setSpacing(0);
mTopMenuBar = new TopMenuBar();
mMainLayout->addWidget(mTopMenuBar, 1);
mRadioWidget = new RadioWidget;
mSweepFrequencyWidget = new SweepFrequencyWidget;
mIntermediateFrequencyWidget = new IntermediateFrequencyWidget;
mMainLayout->addWidget(mRadioWidget, 31);
mMainLayout->addWidget(mSweepFrequencyWidget, 31);
mMainLayout->addWidget(mIntermediateFrequencyWidget, 31);
mMainMenu = new BaseWidgetMenu(this);
mMainMenu->setObjectName("主菜单");
mTopMenu = new BaseWidgetMenu(this);
mTopMenu->setObjectName("顶部菜单");
mServerSettingWidget = new ServerSettingWidget(this);
showRadioWidget();
int fontSize = 30;
auto btn11 = new MenuButton("电台模式", fontSize, [&]() {
showRadioWidget();
mMainMenu->hide();
});
auto btn12 = new MenuButton("中频模式", fontSize, [&]() {
showIntermediateFrequencyWidget();
mMainMenu->hide();
});
auto btn13 = new MenuButton("扫频模式", fontSize, [&]() {
showSweepFrequencyWidget();
mMainMenu->hide();
});
auto btn14 = new MenuButton("服务端设置", fontSize, [&]() {
mMainMenu->hide();
showServerSettingWidget();
});
mSelectShotScreenDialog = new FileExplorer();
// mSelectShotScreenDialog->setGeometry(QApplication::primaryScreen()->geometry());
// mSelectShotScreenDialog->setAcceptMode(QFileDialog::AcceptSave);
// mSelectShotScreenDialog->setOption(QFileDialog::DontUseNativeDialog, false);
auto btn15 = new MenuButton("截屏", fontSize, [&]() {
QTimer::singleShot(500, [this]() {
QPixmap pixmap = this->grab();
auto be = BackEnd::instance();
QString savePath = be->get_screenshot_save_dir_path() + be->get_screenshot_save_file_name();
if(pixmap.save(savePath)) {
qDebug() << "Screenshot saved successfully at" << savePath;
}
else {
qDebug() << "Failed to save screenshot at" << savePath;
}
});
// hideCurHoverWidget();
// mCurrentHoverWidget = mSelectShotScreenDialog;
// mMainMenu->hide();
// QString defaultFileName = "截屏" + QDateTime::currentDateTime().toString("yyyy年MM月dd日_hhmmss");
// mSelectShotScreenDialog->selectFile(BackEnd::instance()->getScreenshotPath() + defaultFileName + ".png");
// mSelectShotScreenDialog->setFocus();
// mSelectShotScreenDialog->show();
// if(mSelectShotScreenDialogFirst){
// mSelectShotScreenDialogFirst = false;
// auto that = mSelectShotScreenDialog->findChild<QLineEdit*>();
// if(that){
// Toolbox::VirtualKeyBoard::instance()->setEdit(that);
// qDebug() << "设置成功!";
// }
// }
//
// connect(mSelectShotScreenDialog, &QFileDialog::fileSelected, [&](const QString &filePath) {
// QPixmap pixmap = this->grab();
// if (pixmap.save(filePath)) {
// qDebug() << "截屏保存到了" << filePath;
// } else {
// qDebug() << "截屏保存失败,路径不对" << filePath;
// }
// });
});
auto be = BackEnd::instance();
mSelectAudioFile = new FileExplorer();
mSelectAudioFile->setParent(this);
mSelectAudioFile->hide();
mSelectAudioFile->setObjectName("选择音频文件播放");
mSelectAudioFile->changeRoot(be->getAudioFileLocation());
connect(mSelectAudioFile->cancelButton, &QPushButton::clicked, [this]() {
qDebug() << "播放音频已取消!";
MainWidget::instance()->getCurrentBaseWidget()->setFocus();
mSelectAudioFile->hide();
});
connect(mSelectAudioFile->confirmButton, &QPushButton::clicked, [this]() {
QString path = mSelectAudioFile->focus.absoluteFilePath();
if(!path.endsWith(".wav")){
qWarning() << "选择的文件结尾不是wav 选择的文件为" + path;
}
mediaPlayer->setMedia(QUrl::fromLocalFile(path));
mediaPlayer->play();
MainWidget::instance()->getCurrentBaseWidget()->setFocus();
mSelectAudioFile->hide();
});
auto btn21 = new MenuButton("播放音频", fontSize, [this]() {
mSelectAudioFile->setGeometry(rect());
mSelectAudioFile->show();
mSelectAudioFile->setFocus();
// qDebug() << "2222222222222222";
setCurrentHoverWidget(mSelectAudioFile);
// qDebug() << "2222222222222222";
});
auto btn22 = new MenuButton("打卡sdk卡", fontSize, [&](){
});
auto btn23 = new DoubleTextMenuButton("开始录音", "停止录音", fontSize, [&](bool isFirst){
if(isFirst) {
QString wav_path = "file:///" + QString(be->getAudioFileLocation() + "%1.wav").arg(
QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss"));
audioRecorder->setOutputLocation(wav_path);
if (audioRecorder->audioInput().isEmpty()) {
qDebug() << "没有找到音频输入设备!";
} else {
qDebug() << "音频输入设备已设置。audioInput:" + audioRecorder->audioInput() +" path:" + wav_path;
}
audioRecorder->record();
} else {
qDebug() << "停止录音" << audioRecorder->error() << audioRecorder->errorString();
audioRecorder->stop();
}
});
auto btn24 = new DoubleTextMenuButton("开始发射", "停止发射", fontSize, [&](bool isFirst){
if(isFirst){
} else {
}
});
mMainMenu->addMenuButtonOnLayout1({btn11, btn12, btn13, btn14, btn15});
mMainMenu->addMenuButtonOnLayout2({btn21, btn22, btn23, btn24}, 1);
auto btnt21 = new MenuButton("PRE", fontSize, [&]() {
qDebug() << "PRE 按下";
});
auto btnt22 = new MenuButton("ATT", fontSize, [&]() {
qDebug() << "PRE 按下";
});
mTopMenu->addMenuButtonOnLayout1({btnt21, btnt22}, 3);
#ifndef MockBackEnd
showFullScreen();
#else
showMaximized();
#endif
}
void MainWidget::paintEvent(QPaintEvent *event) {
QPainter painter(this);
//qDebug() << "MainWidget::paintEvent" ;
//painter.fillRect(rect(), Qt::red);
painter.end();
}
void MainWidget::showIntermediateFrequencyWidget() const {
mSweepFrequencyWidget->hide();
mRadioWidget->hide();
mIntermediateFrequencyWidget->show();
mIntermediateFrequencyWidget->setFocus();
}
void MainWidget::showSweepFrequencyWidget() const {
mIntermediateFrequencyWidget->hide();
mRadioWidget->hide();
mSweepFrequencyWidget->show();
mSweepFrequencyWidget->setFocus();
}
void MainWidget::showRadioWidget() const {
mIntermediateFrequencyWidget->hide();
mSweepFrequencyWidget->hide();
mRadioWidget->show();
mRadioWidget->setFocus();
}
void MainWidget::showServerSettingWidget(){
mServerSettingWidget->raise();
mServerSettingWidget->show();
mServerSettingWidget->setFocus();
setCurrentHoverWidget(mServerSettingWidget);
}
BaseWidget *MainWidget::getCurrentBaseWidget() const {
if (mRadioWidget->isVisible()) return mRadioWidget;
else if (mSweepFrequencyWidget->isVisible()) return mSweepFrequencyWidget;
else return mIntermediateFrequencyWidget;
}
void MainWidget::setCurrentHoverWidget(QWidget* widget) {
qDebug() << "setCurrentHoverWidget pre" << ( mCurrentHoverWidget ? mCurrentHoverWidget->objectName() : "nullptr");
qDebug() << "setCurrentHoverWidget set" << ( widget ? widget->objectName() : "nullptr");
if(mCurrentHoverWidget) {
mCurrentHoverWidget->hide();
}
mCurrentHoverWidget = widget;
}
void MainWidget::hideCurHoverWidget() {
qDebug() << "hideCurHoverWidget() ";
if(mCurrentHoverWidget){
qDebug() << mCurrentHoverWidget->objectName();
mCurrentHoverWidget->hide();
mCurrentHoverWidget = nullptr;
}
}
void MainWidget::resizeEvent(QResizeEvent *event) {
mServerSettingWidget->resize(size());
QWidget::resizeEvent(event);
}
void MainWidget::keyPressEvent(QKeyEvent *event) {
//qDebug()<<"MainWidget::keyPressEvent"<<event->text();
if (event->type() == QEvent::KeyPress) {
BackEnd* g = BackEnd::instance();
if(g->match(event, "主菜单")){
if(!mMainMenu->isVisible()){
hideCurHoverWidget();
int baseHeight = (int)((double)height() * 0.2);
mMainMenu->setGeometry(0, height() - baseHeight, width(), baseHeight);
mMainMenu->raise();
mMainMenu->show();
setCurrentHoverWidget(mMainMenu);
mMainMenu->setFocus();
} else {
mMainMenu->hide();
getCurrentBaseWidget()->setFocus();
}
}
if(g->match(event, "属性菜单")){
getCurrentBaseWidget()->reserverMenu();
event->accept();
return;
}
if(g->match(event, "顶部菜单")){
if(!mTopMenu->isVisible()){
hideCurHoverWidget();
int baseHeight = (int)((double)height() * 0.2);
mTopMenu->setGeometry(0, 0, width(), baseHeight);
mTopMenu->raise();
mTopMenu->show();
setCurrentHoverWidget(mTopMenu);
mTopMenu->setFocus();
} else {
mTopMenu->hide();
getCurrentBaseWidget()->setFocus();
}
}
if(g->match(event, "退出")){
hideCurHoverWidget();
getCurrentBaseWidget()->setFocus();
}
}
event->accept();
}
void MainWidget::wheelEvent(QWheelEvent *event) {
event->accept();
}