Files
Radio/module/radio/BackEnd/MainWidget.cpp
T
2026-06-16 13:38:08 +08:00

311 lines
11 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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();
}