311 lines
11 KiB
C++
311 lines
11 KiB
C++
#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日_hh:mm:ss");
|
||
// 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();
|
||
}
|
||
|