Files
Radio/module/radio/BackEnd/MainWidget.cpp
T
2026-07-29 12:30:40 +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 "Widget/base/export.h"
#include <QScreen>
#include <QTime>
#include "../FileDialog/FileExplorer.h"
Main_Widget::Main_Widget(QWidget *parent) : QWidget(parent) {
setFocusPolicy(Qt::FocusPolicy::NoFocus);
setObjectName("主界面");
audioRecorder = new QAudioRecorder(this);
audioRecorder->setAudioInput(audioRecorder->defaultAudioInput());
QAudioEncoderSettings audio_settings;
audio_settings.setCodec("audio/pcm");
audio_settings.setQuality(QMultimedia::HighQuality);
audio_settings.setSampleRate(44100); // 设置采样率
audio_settings.setChannelCount(2); // 设置立体声
audioRecorder->setAudioSettings(audio_settings);
mediaPlayer = new QMediaPlayer(this);
main_layout = new QVBoxLayout(this);
main_layout->setMargin(8);
main_layout->setSpacing(0);
top_menu_bar = new Top_Menu_Bar();
main_layout->addWidget(top_menu_bar, 1);
radio_widget = new Radio_Widget;
sweep_frequency_widget = new Sweep_Frequency_Widget;
intermediate_frequency_widget = new Intermediate_Frequency_Widget;
main_layout->addWidget(radio_widget, 31);
main_layout->addWidget(sweep_frequency_widget, 31);
main_layout->addWidget(intermediate_frequency_widget, 31);
main_menu = new Base_Widget_Menu(this);
main_menu->setObjectName("主菜单");
top_menu = new Base_Widget_Menu(this);
top_menu->setObjectName("顶部菜单");
server_setting_widget = new Server_Setting_Widget(this);
show_radio_widget();
int font_size = 30;
auto btn11 = new Menu_Button("电台模式", font_size, [&]() {
show_radio_widget();
main_menu->hide();
});
auto btn12 = new Menu_Button("中频模式", font_size, [&]() {
show_intermediate_frequency_widget();
main_menu->hide();
});
auto btn13 = new Menu_Button("扫频模式", font_size, [&]() {
show_sweep_frequency_widget();
main_menu->hide();
});
auto btn14 = new Menu_Button("服务端设置", font_size, [&]() {
main_menu->hide();
show_server_setting_widget();
});
select_shot_screen_dialog = new file_explorer();
// select_shot_screen_dialog->setGeometry(QApplication::primaryScreen()->geometry());
// select_shot_screen_dialog->setAcceptMode(QFileDialog::AcceptSave);
// select_shot_screen_dialog->setOption(QFileDialog::DontUseNativeDialog, false);
auto btn15 = new Menu_Button("截屏", font_size, [&]() {
QTimer::singleShot(500, [this]() {
QPixmap pixmap = this->grab();
auto be = Back_End::instance();
QString save_path = be->get_screenshot_save_dir_path() + be->get_screenshot_save_file_name();
if(pixmap.save(save_path)) {
qDebug() << "Screenshot saved successfully at" << save_path;
}
else {
qDebug() << "Failed to save screenshot at" << save_path;
}
});
// hide_cur_hover_widget();
// current_hover_widget = select_shot_screen_dialog;
// main_menu->hide();
// QString default_file_name = "截屏" + QDateTime::currentDateTime().toString("yyyy年MM月dd日_hhmmss");
// select_shot_screen_dialog->selectFile(Back_End::instance()->getScreenshotPath() + default_file_name + ".png");
// select_shot_screen_dialog->setFocus();
// select_shot_screen_dialog->show();
// if(select_shot_screen_dialog_first){
// select_shot_screen_dialog_first = false;
// auto that = select_shot_screen_dialog->findChild<QLineEdit*>();
// if(that){
// Toolbox::VirtualKeyBoard::instance()->setEdit(that);
// qDebug() << "设置成功!";
// }
// }
//
// connect(select_shot_screen_dialog, &QFileDialog::fileSelected, [&](const QString &filePath) {
// QPixmap pixmap = this->grab();
// if (pixmap.save(filePath)) {
// qDebug() << "截屏保存到了" << filePath;
// } else {
// qDebug() << "截屏保存失败,路径不对" << filePath;
// }
// });
});
auto be = Back_End::instance();
select_audio_file = new file_explorer();
select_audio_file->setParent(this);
select_audio_file->hide();
select_audio_file->setObjectName("选择音频文件播放");
select_audio_file->change_root(be->get_audio_file_location());
connect(select_audio_file->cancelButton, &QPushButton::clicked, [this]() {
qDebug() << "播放音频已取消!";
Main_Widget::instance()->get_current_base_widget()->setFocus();
select_audio_file->hide();
});
connect(select_audio_file->confirmButton, &QPushButton::clicked, [this]() {
QString path = select_audio_file->focus.absoluteFilePath();
if(!path.endsWith(".wav")){
qWarning() << "选择的文件结尾不是wav 选择的文件为" + path;
}
mediaPlayer->setMedia(QUrl::fromLocalFile(path));
mediaPlayer->play();
Main_Widget::instance()->get_current_base_widget()->setFocus();
select_audio_file->hide();
});
auto btn21 = new Menu_Button("播放音频", font_size, [this]() {
select_audio_file->setGeometry(rect());
select_audio_file->show();
select_audio_file->setFocus();
// qDebug() << "2222222222222222";
set_current_hover_widget(select_audio_file);
// qDebug() << "2222222222222222";
});
auto btn22 = new Menu_Button("打卡sdk卡", font_size, [&](){
});
auto btn23 = new Double_Text_Menu_Button("开始录音", "停止录音", font_size, [&](bool is_first){
if(is_first) {
QString wav_path = "file:///" + QString(be->get_audio_file_location() + "%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 Double_Text_Menu_Button("开始发射", "停止发射", font_size, [&](bool is_first){
if(is_first){
} else {
}
});
main_menu->add_menu_button_on_layout1({btn11, btn12, btn13, btn14, btn15});
main_menu->add_menu_button_on_layout2({btn21, btn22, btn23, btn24}, 1);
auto btnt21 = new Menu_Button("PRE", font_size, [&]() {
qDebug() << "PRE 按下";
});
auto btnt22 = new Menu_Button("ATT", font_size, [&]() {
qDebug() << "PRE 按下";
});
top_menu->add_menu_button_on_layout1({btnt21, btnt22}, 3);
#ifndef MockBackEnd
showFullScreen();
#else
showMaximized();
#endif
}
void Main_Widget::paintEvent(QPaintEvent *event) {
QPainter painter(this);
//qDebug() << "Main_Widget::paintEvent" ;
//painter.fillRect(rect(), Qt::red);
painter.end();
}
void Main_Widget::show_intermediate_frequency_widget() const {
sweep_frequency_widget->hide();
radio_widget->hide();
intermediate_frequency_widget->show();
intermediate_frequency_widget->setFocus();
}
void Main_Widget::show_sweep_frequency_widget() const {
intermediate_frequency_widget->hide();
radio_widget->hide();
sweep_frequency_widget->show();
sweep_frequency_widget->setFocus();
}
void Main_Widget::show_radio_widget() const {
intermediate_frequency_widget->hide();
sweep_frequency_widget->hide();
radio_widget->show();
radio_widget->setFocus();
}
void Main_Widget::show_server_setting_widget(){
server_setting_widget->raise();
server_setting_widget->show();
server_setting_widget->setFocus();
set_current_hover_widget(server_setting_widget);
}
Base_Widget *Main_Widget::get_current_base_widget() const {
if (radio_widget->isVisible()) return radio_widget;
else if (sweep_frequency_widget->isVisible()) return sweep_frequency_widget;
else return intermediate_frequency_widget;
}
void Main_Widget::set_current_hover_widget(QWidget* widget) {
qDebug() << "set_current_hover_widget pre" << ( current_hover_widget_value ? current_hover_widget_value->objectName() : "nullptr");
qDebug() << "set_current_hover_widget set" << ( widget ? widget->objectName() : "nullptr");
if(current_hover_widget_value) {
current_hover_widget_value->hide();
}
current_hover_widget_value = widget;
}
void Main_Widget::hide_cur_hover_widget() {
qDebug() << "hide_cur_hover_widget() ";
if(current_hover_widget_value){
qDebug() << current_hover_widget_value->objectName();
current_hover_widget_value->hide();
current_hover_widget_value = nullptr;
}
}
void Main_Widget::resizeEvent(QResizeEvent *event) {
server_setting_widget->resize(size());
QWidget::resizeEvent(event);
}
void Main_Widget::keyPressEvent(QKeyEvent *event) {
//qDebug()<<"Main_Widget::keyPressEvent"<<event->text();
if (event->type() == QEvent::KeyPress) {
Back_End* g = Back_End::instance();
if(g->match(event, "主菜单")){
if(!main_menu->isVisible()){
hide_cur_hover_widget();
int base_height = (int)((double)height() * 0.2);
main_menu->setGeometry(0, height() - base_height, width(), base_height);
main_menu->raise();
main_menu->show();
set_current_hover_widget(main_menu);
main_menu->setFocus();
} else {
main_menu->hide();
get_current_base_widget()->setFocus();
}
}
if(g->match(event, "属性菜单")){
get_current_base_widget()->reserver_menu();
event->accept();
return;
}
if(g->match(event, "顶部菜单")){
if(!top_menu->isVisible()){
hide_cur_hover_widget();
int base_height = (int)((double)height() * 0.2);
top_menu->setGeometry(0, 0, width(), base_height);
top_menu->raise();
top_menu->show();
set_current_hover_widget(top_menu);
top_menu->setFocus();
} else {
top_menu->hide();
get_current_base_widget()->setFocus();
}
}
if(g->match(event, "退出")){
hide_cur_hover_widget();
get_current_base_widget()->setFocus();
}
}
event->accept();
}
void Main_Widget::wheelEvent(QWheelEvent *event) {
event->accept();
}