首次提交

This commit is contained in:
2026-06-16 13:38:08 +08:00
commit ec32ae543d
192 changed files with 13162 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
#ifndef a_采集预处理_H
#define a_采集预处理_H
#include "function_global.h"
class T_采集预处理_瀑布图 : public YSG::Plot {
public:
YSG::FrequentAxis* xAxis{};
YSG::TimeAxis* yAxis{};
YSG::MutiSelectRect* msr{};
YSG::WaterFall* wf{};
QMenu* mMenu{};
void init() override {
Plot::init();
mObjectName = "WaterFallPlot";
bindRenderThread(mObjectName + "Thread");
xAxis = YSG::FrequentAxis::Builder(this, Qt::Horizontal).set_tickLength(-10).set_subTickLength(-5).build();
yAxis = YSG::TimeAxis::Builder(this, Qt::Vertical).build();
wf = YSG::WaterFall::Builder(xAxis, yAxis).set_layerName("plottable").set_frequentRange({0, 20}).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());
// wf->set_frequentPointSize(wf->frequentAxis()->getPixelPointSize());
wf->set_frequentPointSize(width());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!mMenu)
{
auto ws =
bw(cw(wf, -1), "瀑布图") + bw(cw(xAxis), "频率轴") + bw(cw(yAxis), "时间轴") + bw(cw(msr), "多选框");
mMenu = createMenu(this, ws);
}
mMenu->exec(event->globalPos());
}
};
class T_采集预处理_频谱图 : public YSG::Plot {
public:
YSG::FrequentAxis* xAxis{};
YSG::Axis* yAxis{};
YSG::MutiSelectRect* msr{};
YSG::Spectrum* sp{};
QMenu* mMenu{};
void init() override {
Plot::init();
mObjectName = "SpectrumPlot";
bindRenderThread(mObjectName + "Thread");
xAxis = YSG::FrequentAxis::Builder(this, Qt::Horizontal)
.set_coordRange({0, 100})
.set_tickLength(-10)
.set_subTickLength(-5)
.set_use_wheel(true)
.set_use_drag(true)
.build();
yAxis = YSG::Axis::Builder(this, Qt::Vertical)
.set_coordRange({100, 0})
.set_unitText("功率")
.set_use_drag(true)
.build();
sp = YSG::Spectrum::Builder(xAxis, yAxis).set_frequentRange({0, 100}).build();
msr = YSG::MutiSelectRect::Builder(xAxis, yAxis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
int leftMargin = 20, rightMargin = 20, topMargin = 20, bottomMargin = 20;
int w = width() - leftMargin - rightMargin;
int h = height() - topMargin - bottomMargin;
xAxis->set_x(leftMargin);
xAxis->set_y(height() - bottomMargin);
xAxis->set_pixelSize(w);
yAxis->set_x(leftMargin);
yAxis->set_y(topMargin);
yAxis->set_pixelSize(h);
sp->set_frequentPointSize(sp->frequentAxis()->getPixelPointSize());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!mMenu)
{
auto ws =
bw(cw(sp, -1), "频谱图") + bw(cw(xAxis), "频率x轴") + bw(cw(yAxis), "功率y轴") + bw(cw(msr), "多选框");
mMenu = createMenu(this, ws);
}
mMenu->exec(event->globalPos());
}
};
class : public BaseWidget {
public:
QHBoxLayout* mainLayout{};
T_采集预处理_瀑布图* m_瀑布图{};
T_采集预处理_频谱图* m_频谱图{};
QVBoxLayout* createV();
();
void paintEvent(QPaintEvent* event) override;
};
#endif
+62
View File
@@ -0,0 +1,62 @@
#ifndef a_信号侦察_H
#define a_信号侦察_H
#include "function_global.h"
class T_信号侦察_频谱图 : public YSG::Plot {
public:
YSG::FrequentAxis* xAxis{};
YSG::Axis* yAxis{};
YSG::MutiSelectRect* msr{};
YSG::Spectrum* sp{};
QMenu* mMenu{};
void init() override {
Plot::init();
mObjectName = "SpectrumPlot";
bindRenderThread(mObjectName + "Thread");
xAxis = YSG::FrequentAxis::Builder(this, Qt::Horizontal)
.set_coordRange({0, 100})
.set_tickLength(-10)
.set_subTickLength(-5)
.set_use_wheel(true)
.set_use_drag(true)
.build();
yAxis = YSG::Axis::Builder(this, Qt::Vertical)
.set_coordRange({100, 0})
.set_unitText("功率")
.set_use_drag(true)
.build();
sp = YSG::Spectrum::Builder(xAxis, yAxis).set_frequentRange({0, 100}).build();
msr = YSG::MutiSelectRect::Builder(xAxis, yAxis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
int leftMargin = 20, rightMargin = 20, topMargin = 20, bottomMargin = 20;
int w = width() - leftMargin - rightMargin;
int h = height() - topMargin - bottomMargin;
xAxis->set_x(leftMargin);
xAxis->set_y(height() - bottomMargin);
xAxis->set_pixelSize(w);
yAxis->set_x(leftMargin);
yAxis->set_y(topMargin);
yAxis->set_pixelSize(h);
sp->set_frequentPointSize(sp->frequentAxis()->getPixelPointSize());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!mMenu)
{
auto ws =
bw(cw(sp, -1), "频谱图") + bw(cw(xAxis), "频率x轴") + bw(cw(yAxis), "功率y轴") + bw(cw(msr), "多选框");
mMenu = createMenu(this, ws);
}
mMenu->exec(event->globalPos());
}
};
class : public BaseWidget {
public:
QHBoxLayout* mainLayout{};
T_信号侦察_频谱图* m_频谱图{};
TreeView *treeView{};
QVBoxLayout* createV();
void paintEvent(QPaintEvent* event) override;
();
};
#endif // 信号侦察_H
+12
View File
@@ -0,0 +1,12 @@
#ifndef a_信号处理_H
#define a_信号处理_H
#include "function_global.h"
class : public BaseWidget {
public:
void paintEvent(QPaintEvent* event) override;
QVBoxLayout* createV();
QHBoxLayout* mainLayout{};
TreeView* treeView{};
();
};
#endif // 信号处理_H
+62
View File
@@ -0,0 +1,62 @@
#ifndef a_信号生成_H
#define a_信号生成_H
#include "function_global.h"
class T_信号生成_频谱图 : public YSG::Plot {
public:
YSG::FrequentAxis* xAxis{};
YSG::Axis* yAxis{};
YSG::MutiSelectRect* msr{};
YSG::Spectrum* sp{};
QMenu* mMenu{};
void init() override {
Plot::init();
mObjectName = "SpectrumPlot";
bindRenderThread(mObjectName + "Thread");
xAxis = YSG::FrequentAxis::Builder(this, Qt::Horizontal)
.set_coordRange({0, 100})
.set_tickLength(-10)
.set_subTickLength(-5)
.set_use_wheel(true)
.set_use_drag(true)
.build();
yAxis = YSG::Axis::Builder(this, Qt::Vertical)
.set_coordRange({100, 0})
.set_unitText("功率")
.set_use_drag(true)
.build();
sp = YSG::Spectrum::Builder(xAxis, yAxis).set_frequentRange({0, 100}).build();
msr = YSG::MutiSelectRect::Builder(xAxis, yAxis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
int leftMargin = 20, rightMargin = 20, topMargin = 20, bottomMargin = 20;
int w = width() - leftMargin - rightMargin;
int h = height() - topMargin - bottomMargin;
xAxis->set_x(leftMargin);
xAxis->set_y(height() - bottomMargin);
xAxis->set_pixelSize(w);
yAxis->set_x(leftMargin);
yAxis->set_y(topMargin);
yAxis->set_pixelSize(h);
sp->set_frequentPointSize(sp->frequentAxis()->getPixelPointSize());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!mMenu)
{
auto ws =
bw(cw(sp, -1), "频谱图") + bw(cw(xAxis), "频率x轴") + bw(cw(yAxis), "功率y轴") + bw(cw(msr), "多选框");
mMenu = createMenu(this, ws);
}
mMenu->exec(event->globalPos());
}
};
class : public BaseWidget {
public:
void paintEvent(QPaintEvent* event) override;
QHBoxLayout* mainLayout{};
QVBoxLayout* createV();
TreeView* treeView{};
T_信号生成_频谱图* m_频谱图{};
();
};
#endif // 信号生成_H
+62
View File
@@ -0,0 +1,62 @@
#ifndef a_信号对消_H
#define a_信号对消_H
#include "function_global.h"
class T_信号对消_频谱图 : public YSG::Plot {
public:
YSG::FrequentAxis* xAxis{};
YSG::Axis* yAxis{};
YSG::MutiSelectRect* msr{};
YSG::Spectrum* sp{};
QMenu* mMenu{};
void init() override {
Plot::init();
mObjectName = "SpectrumPlot";
bindRenderThread(mObjectName + "Thread");
xAxis = YSG::FrequentAxis::Builder(this, Qt::Horizontal)
.set_coordRange({0, 100})
.set_tickLength(-10)
.set_subTickLength(-5)
.set_use_wheel(true)
.set_use_drag(true)
.build();
yAxis = YSG::Axis::Builder(this, Qt::Vertical)
.set_coordRange({100, 0})
.set_unitText("功率")
.set_use_drag(true)
.build();
sp = YSG::Spectrum::Builder(xAxis, yAxis).set_frequentRange({0, 100}).build();
msr = YSG::MutiSelectRect::Builder(xAxis, yAxis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
int leftMargin = 20, rightMargin = 20, topMargin = 20, bottomMargin = 20;
int w = width() - leftMargin - rightMargin;
int h = height() - topMargin - bottomMargin;
xAxis->set_x(leftMargin);
xAxis->set_y(height() - bottomMargin);
xAxis->set_pixelSize(w);
yAxis->set_x(leftMargin);
yAxis->set_y(topMargin);
yAxis->set_pixelSize(h);
sp->set_frequentPointSize(sp->frequentAxis()->getPixelPointSize());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!mMenu)
{
auto ws =
bw(cw(sp, -1), "频谱图") + bw(cw(xAxis), "频率x轴") + bw(cw(yAxis), "功率y轴") + bw(cw(msr), "多选框");
mMenu = createMenu(this, ws);
}
mMenu->exec(event->globalPos());
}
};
class : public BaseWidget {
public:
void paintEvent(QPaintEvent* event) override;
QHBoxLayout* mainLayout{};
QVBoxLayout* createV();
T_信号对消_频谱图* m_频谱图{};
TreeView *treeView{};
();
};
#endif // 信号对消_H
+12
View File
@@ -0,0 +1,12 @@
#ifndef a_存储列表_H
#define a_存储列表_H
#include "function_global.h"
class : public BaseWidget {
public:
void paintEvent(QPaintEvent* event) override;
QHBoxLayout* mainLayout{};
CustomTableView* m_table{};
QVBoxLayout* createV();
();
};
#endif // 存储列表_H
+14
View File
@@ -0,0 +1,14 @@
#include "function_global.h"
#ifndef b0_升级记录_H
#define b0_升级记录_H
class : QWidget{
public:
QString content;
Button *confirm{};
};
#endif
+253
View File
@@ -0,0 +1,253 @@
#include "../MainWindow.h"
#include "a2_信号侦察.h"
#include "a3_信号处理.h"
#include "a4_信号生成.h"
#include "a5_信号对消.h"
#include "function.export.h"
#include "a6_存储列表.h"
Data_source data_source;
void Data_source::set_root(MainWindow* root) { m_root = root; }
Data_source::Data_source() {}
// 1
::() {
mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(0);
mainLayout->addLayout(createV(), 3);
auto fw = new FunctionWidget();
auto = create_input("中心频率", "MHZ");
auto = create_input("带宽", "MHZ");
auto = create_input("采样率", "MHZ");
auto layout = new QVBoxLayout;
layout->setSpacing(0);
layout->addLayout();
layout->addSpacing(10);
layout->addLayout();
layout->addSpacing(10);
layout->addLayout();
fw->init("预处理参数", "展示设备宽采效果", layout);
mainLayout->addWidget(fw, 1);
}
QVBoxLayout* ::createV() {
QVBoxLayout* ret;
ret = new QVBoxLayout();
m_频谱图 = new T_采集预处理_频谱图;
m_频谱图->init();
ret->addWidget(m_频谱图);
m_瀑布图 = new T_采集预处理_瀑布图;
m_瀑布图->init();
ret->addWidget(m_瀑布图);
return ret;
}
void ::paintEvent(QPaintEvent* event) {
// QPainter painter(this);
// painter.fillRect(event->rect(), Qt::white);
QWidget::paintEvent(event);
}
// 2
QVBoxLayout* ::createV() {
auto ret = new QVBoxLayout;
m_频谱图 = new T_信号侦察_频谱图();
m_频谱图->init();
ret->addWidget(m_频谱图, 1);
QStringList headers = {"子带通道", "频点", "出联状态", "锁定状态", "出联时间", "出联时长", "符号率", "频值", "EbNo", "误码率", "电平", "帧定时"};
TreeModel* model = new TreeModel(headers);
QStringList parentData = {"父节点1", "数据2", "数据3"};
model->addNode(parentData);
QModelIndex parentIndex = model->index(0, 0);
QStringList childData = {"子节点1", "数据2", "数据3"};
model->addNode(childData, parentIndex);
treeView = new TreeView;
treeView->setModel(model);
TreeDelegate* delegate = new TreeDelegate;
treeView->setItemDelegate(delegate);
treeView->expandAll();
ret->addWidget(treeView, 1);
return ret;
}
::() {
mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(0);mainLayout->setMargin(0);
mainLayout->addLayout(createV(), 3);
auto fw = new FunctionWidget();
auto layout = new QVBoxLayout;
layout->setSpacing(0);
fw->init("侦察参数", "展示参数信息", layout);
layout->addLayout(create_check_box("载波通道", {"221", "222"}));
layout->addLayout(create_input("中心频率", "MHz"));
layout->addLayout(create_input("带宽", "KHz"));
layout->addLayout(create_input("采样率", "KHz"));
layout->addLayout(create_check_box("调制方式", {"221", "222"}));
layout->addLayout(create_input("符号率", "KBd"));
layout->addLayout(create_check_box("译码方式", {"TPC"}));
mainLayout->addWidget(fw, 1);
}
void ::paintEvent(QPaintEvent* event) {
QPainter painter(this);
//painter.fillRect(event->rect(), Qt::yellow);
painter.end();
QWidget::paintEvent(event);
}
// 3
::() {
mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(0);
mainLayout->addLayout(createV(), 3);
auto fw = new FunctionWidget();
auto layout = new QVBoxLayout;
layout->setSpacing(0);
layout->addLayout(create_check_box("工作模式", {"信号侦察"}));
layout->addLayout(create_check_box("工作模式", {"信号侦察"}));
fw->init("处理参数", "对用户或载波解调译码分析", layout);
mainLayout->addWidget(fw, 1);
}
void ::paintEvent(QPaintEvent* event) {
QPainter painter(this);
//painter.fillRect(event->rect(), Qt::green);
painter.end();
QWidget::paintEvent(event);
}
QVBoxLayout* ::createV() {
QVBoxLayout* ret;
ret = new QVBoxLayout();
ret->addWidget(new QWidget, 1);
QStringList headers = {"子带通道", "频点", "出联状态", "锁定状态", "出联时间", "出联时长", "符号率", "频值", "EbNo", "误码率", "电平", "帧定时"};
TreeModel* model = new TreeModel(headers);
QStringList parentData = {"父节点1", "数据2", "数据3"};
model->addNode(parentData);
QModelIndex parentIndex = model->index(0, 0);
QStringList childData = {"子节点1", "数据2", "数据3"};
model->addNode(childData, parentIndex);
treeView = new TreeView;
treeView->setModel(model);
TreeDelegate* delegate = new TreeDelegate;
treeView->setItemDelegate(delegate);
treeView->expandAll();
ret->addWidget(treeView, 1);
return ret;
}
// 4
::() {
mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(0);
mainLayout->addLayout(createV(), 3);
auto fw = new FunctionWidget();
auto layout = new QVBoxLayout;
layout->setSpacing(0);
layout->addLayout(create_check_box("发射模式", {"多载波合路"}));
layout->addLayout(create_check_box("数据源", {"本地样本"}));
layout->addLayout(create_check_box("切入点", {"HDLC封装"}));
layout->addLayout(create_check_box("信道编码", {"VIT"}));
// TODO 80比特帧封装
// TODO 符号映射
layout->addLayout(create_check_box("调制类型", {"BPSK"}));
layout->addLayout(create_input("发射时刻", {""}));
// TODO 发射样本
fw->init("生成参数", "支持", layout);
mainLayout->addWidget(fw, 1);
}
// 4
void ::paintEvent(QPaintEvent* event) {
QPainter painter(this);
//painter.fillRect(event->rect(), Qt::red);
painter.end();
QWidget::paintEvent(event);
}
QVBoxLayout* ::createV() {
auto ret = new QVBoxLayout;
m_频谱图 = new T_信号生成_频谱图();
m_频谱图->init();
ret->addWidget(m_频谱图, 1);
QStringList headers = {"载波通道", "数据源"};
TreeModel* model = new TreeModel(headers);
QStringList parentData = {"父节点1", "数据2", "数据3"};
model->addNode(parentData);
QModelIndex parentIndex = model->index(0, 0);
QStringList childData = {"子节点1", "数据2", "数据3"};
model->addNode(childData, parentIndex);
treeView = new TreeView;
treeView->setModel(model);
TreeDelegate* delegate = new TreeDelegate;
treeView->setItemDelegate(delegate);
treeView->expandAll();
ret->addWidget(treeView, 1);
return ret;
}
// 5
::() {
mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(0);
mainLayout->addLayout(createV(), 3);
auto fw = new FunctionWidget();
auto layout = new QVBoxLayout;
layout->setSpacing(0);
layout->addLayout(create_check_box("时差", {"10ms", "20ms"}));
layout->addLayout(create_check_box("频差", {"100Hz"}));
layout->addLayout(create_check_box("搜索范围", {"30ms"}));
fw->init("对消参数", "对40M内发射信号对消", layout);
mainLayout->addWidget(fw, 1);
}
void ::paintEvent(QPaintEvent* event) {
QPainter painter(this);
//painter.fillRect(event->rect(), Qt::blue);
painter.end();
QWidget::paintEvent(event);
}
QVBoxLayout* ::createV() {
auto ret = new QVBoxLayout;
m_频谱图 = new T_信号对消_频谱图();
m_频谱图->init();
ret->addWidget(m_频谱图, 1);
QStringList headers = {"子带通道", "频点", "出联状态", "锁定状态", "出联时间", "出联时长", "符号率", "频值", "EbNo", "误码率", "电平", "帧定时"};
TreeModel* model = new TreeModel(headers);
QStringList parentData = {"父节点1", "数据2", "数据3"};
model->addNode(parentData);
QModelIndex parentIndex = model->index(0, 0);
QStringList childData = {"子节点1", "数据2", "数据3"};
model->addNode(childData, parentIndex);
treeView = new TreeView;
treeView->setModel(model);
TreeDelegate* delegate = new TreeDelegate;
treeView->setItemDelegate(delegate);
treeView->expandAll();
ret->addWidget(treeView, 1);
return ret;
}
// 6
::() {
mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(0);
mainLayout->addLayout(createV(), 3);
auto fw = new FunctionWidget();
auto layout = new QVBoxLayout;
layout->setSpacing(0);
layout->addLayout(create_check_box("工作模式", {"信号侦察"}));
layout->addLayout(create_check_box("工作模式", {"信号侦察"}));
fw->init("处理参数", "对用户或载波解调译码分析", layout);
mainLayout->addWidget(fw, 1);
}
void ::paintEvent(QPaintEvent* event) {
QPainter painter(this);
//painter.fillRect(event->rect(), Qt::gray);
painter.end();
QWidget::paintEvent(event);
}
QVBoxLayout* ::createV() {
auto ret = new QVBoxLayout;
m_table = new CustomTableView(this);
auto* model = new CustomModel(this);
auto* delegate = new CustomTableDelegate(this);
m_table->setModel(model);
m_table->setItemDelegate(delegate);
ret->addWidget(m_table);
return ret;
}
+19
View File
@@ -0,0 +1,19 @@
#ifndef CMAKEUSERPRESETS_JSON_FUNCTION_EXPORT_H
#define CMAKEUSERPRESETS_JSON_FUNCTION_EXPORT_H
#include "a1_采集预处理.h"
#include "a2_信号侦察.h"
#include "a3_信号处理.h"
#include "a4_信号生成.h"
#include "a5_信号对消.h"
#include "a6_存储列表.h"
#include "b0_升级记录.h"
class MainWindow;
class Data_source {
public:
void set_root(MainWindow* root);
Data_source();
protected:
MainWindow* m_root{};
};
extern Data_source data_source;
#endif
+88
View File
@@ -0,0 +1,88 @@
#ifndef FUNCTION_GLOBAL_H
#define FUNCTION_GLOBAL_H
#include <QPaintEvent>
#include <QPainter>
#include <QWidget>
#include "DemoGallery/Tool.h"
#include "component/Button.h"
#include "component/ComboBox.h"
#include "component/Input.h"
#include "../Tree_Table.h"
#include "../Table.h"
extern QColor base;
class FunctionWidget : public QWidget {
public:
QLabel* title{};
QLabel* explain{};
QVBoxLayout* layout{};
Button* btn{};
FunctionWidget() {}
void init(const QString& title_text, const QString& explain_text, QLayout* l) {
this->title = new QLabel(title_text);
this->explain = new QLabel(explain_text);
layout = new QVBoxLayout(this);
layout->addLayout(create_line_1());
btn = new Button();
btn->content.text = new Text(QString("确定"), QPen(Qt::white));
layout->addLayout(l);
// qDebug() << " btn->sizeHint() " << btn->sizeHint();
layout->addStretch(1);
layout->addWidget(btn);
btn->background.set_color(base);
}
QHBoxLayout* create_line_1() {
auto ret = new QHBoxLayout;
ret->addWidget(this->title, 1);
ret->addWidget(this->explain, 1);
return ret;
}
void paintEvent(QPaintEvent* event) override {
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing);
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::white);
painter.drawRoundedRect(rect(), 8, 8);
painter.end();
}
};
class BaseWidget : public QWidget {
public:
};
static Button* create_label(const QString& content) {
auto ret = new Button;
ret->content.text = new Text(content);
ret->content.layout.second_prefix = 4;
ret->content.layout.second_suffix = 0;
ret->content.layout.main_type = Layout::Prefix_Space;
// ret->background.set_border(Qt::yellow);
return ret;
}
static QLayout* create_input(const QString& content, const QString& unit) {
auto ret = new QVBoxLayout;
ret->setSpacing(0);
ret->setMargin(0);
auto label = create_label(content);
ret->addWidget(label);
auto core = new Input;
core->unit = unit;
core->focus_color = base;
ret->addWidget(core);
return ret;
}
static QLayout* create_check_box(const QString& content, const QVector<QString>& opt_list) {
auto ret = new QVBoxLayout;
ret->setSpacing(0);
ret->setMargin(0);
auto label = create_label(content);
ret->addWidget(label);
auto core = new ComboBox;
for (auto& opt : opt_list)
{
core->addItem(opt);
}
ret->addWidget(core);
return ret;
}
#endif