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

163 lines
5.6 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 "SweepFrequencyWidget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QVector>
#include <QPainter>
#include <QDebug>
#include "../component/FrequentShower.h"
#include "../component/ProgressBar.h"
#include "../component/ConsoleWidget.h"
#include "../component/ShowTime.h"
#include "../Global.h"
#include "../menu/BaseWidgetMenu.h"
#include "YSGraphic_Core/DemoGallery/Tool.h"
QWidget* SweepFrequencyWidget::createSpectrogramPowerPlot() {
class SweepFrequentPlot : public YSG::Plot {
public:
YSG::Axis *xAxis{};
YSG::Axis *yAxis{};
YSG::MutiSelectRect *msr{};
YSG::SweepFrequent* sf{};
QMenu *mMenu{};
void init() override {
Plot::init();
mObjectName = "AxisTestPlot";
bindRenderThread(mObjectName + "Thread");
xAxis = YSG::Axis::Builder(this, Qt::Horizontal)
.set_coordRange({0, 100})
.set_tickLength(-10).build();
yAxis = YSG::Axis::Builder(this, Qt::Vertical)
.set_coordRange({100, 0})
.set_tickLength(-10).build();
sf = YSG::SweepFrequent::Builder(xAxis, yAxis)
.set_blockNum(200)
.set_blockFrequentPointSize(20)
.set_frequentRange({0 , 100})
.build();
msr = YSG::MutiSelectRect::Builder(xAxis, yAxis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
xAxis->set_x(0);
xAxis->set_y(height() - 1);
xAxis->set_pixelSize(width());
yAxis->set_x(0);
yAxis->set_y(0);
yAxis->set_pixelSize(height());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if(!mMenu) {
auto ws =
bw(cw(sf, -1), "扫频图") +
bw(cw(xAxis), "x轴") +
bw(cw(yAxis), "y轴") +
bw(cw(msr), "多选框");
mMenu = createMenu(this, ws);
}
mMenu->exec(event->globalPos());
}
};
auto w = new SweepFrequentPlot;
w->init();
mSweepFrequencyLine = w->sf;
return w;
}
//mAM, mATU, mVSQL, mNB, mNR, mDNF, mPRE, mATT, mSPL, mFIL1, mAGC_A
SweepFrequencyWidget::SweepFrequencyWidget(QWidget *parent) : BaseWidget(parent) {
setObjectName("扫频界面");
int fontSize = 20;
m1 = createNormal("RF Gain\n62", fontSize);
m2 = createNormal("FFT SPAN\n100K", fontSize);
m3 = createNormal("频率表\n1289.6MHZ", fontSize);
m4 = createNormal("MODEM\nRTTY", fontSize);
mSelectValueWidget = new FrequentShower(this);
mProgressBar1 = new ProgressBar({
{"S", Qt::black},
{"3", Qt::black},
{"5", Qt::black},
{"7", Qt::black},
{"9", Qt::black},
{"+20", Qt::yellow},
{"+40", Qt::yellow},
{"+60", Qt::red},
}, this);
mProgressBar2 = new ProgressBar({
{"1", Qt::black},
{"2", Qt::yellow},
{"3", Qt::red},
{">5", Qt::red},
}, this);
auto main = createVBoxLayout({}, this);
main->addStretch(1);
{ // 中心Layout
auto center = createHBoxLayout();
main->addLayout(center, 7);
auto front = createVBoxLayout();
center->addLayout(front, 1);
front->addWidget(m1, 3);
front->addStretch(1);
front->addWidget(m2, 3);
center->addSpacing(4);
auto middle = createVBoxLayout();
center->addLayout(middle, 9);
middle->addStretch(1);
middle->addWidget(mSelectValueWidget, 4);
auto middleH = createHBoxLayout();
middle->addLayout(middleH, 2);
middleH->addWidget(mProgressBar1, 5);
middleH->addStretch(1);
middleH->addWidget(mProgressBar2, 3);
center->addStretch(5);
center->addSpacing(4);
auto back1 = createVBoxLayout();
center->addLayout(back1, 1);
back1->addWidget(m3, 3);
back1->addStretch(1);
back1->addWidget(m4, 3);
}
main->addStretch(1);
main->addSpacing(8);
//main->addWidget(new TestWidget, 24);
main->addWidget(createSpectrogramPowerPlot(), 24);
initMenu();
}
SweepFrequencyWidget::~SweepFrequencyWidget() {
}
void SweepFrequencyWidget::focusInEvent(QFocusEvent *event) {
QWidget::focusInEvent(event);
mSelectValueWidget->setFocus();
}
void SweepFrequencyWidget::initMenu() {
int fontSize = 30;
auto startFreq = new ValueMenuButton("起始频率:%1 Hz", fontSize, [&](ValueMenuButton* that, bool add){
that->setValue(that->mValue + (double)(add ? 1 : -1));
}, -1);
startFreq->setValue(mSweepFrequencyLine->frequentRange().lower);
auto endFreq = new ValueMenuButton("终止频率:%1 Hz", fontSize, [&](ValueMenuButton* that, bool add){
that->setValue(that->mValue + (double)(add ? 1 : -1));
}, -1);
endFreq->setValue(mSweepFrequencyLine->frequentRange().upper);
auto btn3 = new MenuButton("设置频率", fontSize, [&, startFreq, endFreq](){
mSweepFrequencyLine->set_frequentRange({startFreq->mValue, endFreq->mValue});
});
mBaseWidgetMenu->addMenuButtonOnLayout1({startFreq, endFreq, btn3}, 2);
}