#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 #include #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日_hh:mm:ss"); // mSelectShotScreenDialog->selectFile(BackEnd::instance()->getScreenshotPath() + defaultFileName + ".png"); // mSelectShotScreenDialog->setFocus(); // mSelectShotScreenDialog->show(); // if(mSelectShotScreenDialogFirst){ // mSelectShotScreenDialogFirst = false; // auto that = mSelectShotScreenDialog->findChild(); // 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"<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(); }