命名规范

This commit is contained in:
2026-07-29 12:30:40 +08:00
parent ae07e67619
commit 5a3511bb58
261 changed files with 8776 additions and 8831 deletions
+51
View File
@@ -0,0 +1,51 @@
#pragma once
#include "../Renderive/base/Tool.h"
static QWidget* create_afterglow() {
class Afterglow_Plot : public renderive::Plot {
public:
std::shared_ptr<renderive::Frequency_Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
std::shared_ptr<renderive::Afterglow> ag{};
std::shared_ptr<renderive::Multi_Select_Rect> msr{};
QMenu* menu{};
void init() override {
Plot::init();
object_name = "Afterglow_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis, Qt::Horizontal).build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical).build();
ag = renderive::Afterglow::Builder(data, x_axis, y_axis)
.set_frequency_range({0, 100})
.set_power_range({0, 100})
.build();
msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height() - 1);
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
ag->set_frequency_point_size(ag->frequency_axis()->get_pixel_point_size());
ag->set_power_point_size(ag->power_axis()->get_pixel_point_size());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws =
bw(cw(ag.get(), -1), "余辉图") +
bw(cw(x_axis.get()), "频率轴") +
bw(cw(y_axis.get()), "功率概率轴") +
bw(cw(msr.get()), "多选框");
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
}
};
auto w = new Afterglow_Plot;
w->init();
return w;
}
+50
View File
@@ -0,0 +1,50 @@
#pragma once
#include "../Renderive/base/Tool.h"
static QWidget* create_audio_plot() {
class Audio_Plot : public renderive::Plot {
public:
std::shared_ptr<renderive::Time_Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
std::shared_ptr<renderive::Audio_Frequency> audio{};
std::shared_ptr<renderive::Multi_Select_Rect> msr{};
QMenu* menu{};
void init() override {
Plot::init();
object_name = "Audio_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Time_Axis::Builder(axis, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical).build();
audio = renderive::Audio_Frequency::Builder(data, x_axis, y_axis).build();
msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height() - 1);
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
audio->set_time_point_size(x_axis->get_pixel_point_size());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws =
bw(cw(audio.get(), -1), "音频图") +
bw(cw(y_axis.get()), "功率y轴") +
bw(cw(x_axis.get()), "时间轴") +
bw(cw(msr.get()), "多选框");
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
}
};
auto w = new Audio_Plot;
w->init();
return w;
}
+157
View File
@@ -0,0 +1,157 @@
#include "Demo_Gallery.h"
#include <QtWidgets>
#include "Widget/Qt/export.h"
using namespace Psc;
QStandardItem* Demo_Gallery::get_from_data(const T_Data& data) {
auto w = new QWidget;
auto l = new QVBoxLayout(w);
l->setContentsMargins({0, 0, 0, 0});
l->setSpacing(0);
l->addWidget(data.plot);
// l->addStretch();
data_map[data.name] = w;
return new QStandardItem(data.name);
}
QList<QStandardItem*> Demo_Gallery::get_list(const QVector<T_Data>& datas) {
QList<QStandardItem*> ret;
for (const T_Data& data : datas) {
ret.append(get_from_data(data));
}
return ret;
}
void Demo_Gallery::change_to(const QString& name) {
if (data_map.contains(name)) {
QWidget* associatedWidget = data_map[name];
int i = tab_widget->indexOf(associatedWidget);
if (i == -1) {
// 标签页不存在,添加新的标签页
tab_widget->addTab(associatedWidget, name);
tab_widget->setCurrentIndex(tab_widget->indexOf(associatedWidget));
}
else {
// 标签页已经存在,设置为当前标签页
tab_widget->setCurrentIndex(i);
}
}
}
class Combo_Box_Example : public QWidget {
public:
Combo_Box_Example(QWidget* parent = nullptr) : QWidget(parent) {
// 创建一个QComboBox
QComboBox* combo_box = new QComboBox(this);
// 向QComboBox添加一些选项
combo_box->addItem("Option 1");
combo_box->addItem("Option 2");
combo_box->addItem("Option 3");
// 创建一个标签用来显示选中的选项
QLabel* label = new QLabel("Selected: ", this);
QObject::connect(combo_box, QOverload<int>::of(&QComboBox::currentIndexChanged), [=](int index) {
// 这里你可以获取当前选择项的索引
label->setText("Selected: " + combo_box->currentText());
});
// 布局
QVBoxLayout* layout = new QVBoxLayout;
layout->addWidget(combo_box);
layout->addWidget(label);
setLayout(layout);
}
};
Demo_Gallery::Demo_Gallery() :
tree_view(new QTreeView(this)),
standard_model(new QStandardItemModel(this)),
tab_widget(new QTabWidget) {
main_layout = new QHBoxLayout(this);
main_layout->setContentsMargins(0, 0, 0, 0);
main_layout->setSpacing(0);
tree_view->setFixedWidth(200);
tree_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
main_layout->addWidget(tree_view);
tab_widget->setTabsClosable(true);
main_layout->addWidget(tab_widget);
// tree_view->setItemDelegate(new Delegate);
tree_view->setHeaderHidden(true);
QStandardItem* root = standard_model->invisibleRootItem();
auto plottable = new QStandardItem("plottable");
plottable->appendRows(get_list({
{"余晖图", create_afterglow()},
{"音频图", create_audio_plot()},
{"星座图", create_planisphere_plot()},
{"频谱图", create_spectrun_plot()},
{"瀑布图", create_water_fall_plot()},
{"扫频图", create_sweep_frequent_plot()},
}));
auto base = new QStandardItem("基础元素");
base->appendRows(get_list({
{"轴测试", create_axis_test_plot()},
{"时间轴测试", create_time_axis_test_plot()},
{"频率轴测试", create_frequent_axis_test_plot()},
{"多选框测试", create_Multi_Select_Plot()},
}));
auto t1 = new Byte_Select;
auto t2 = new Test_File_Gather_Widget;
auto t3 = new Test_File_Play_Widget;
auto custom_widget = new QStandardItem("自定义控件");
custom_widget->appendRows(get_list({
{"Enum_Select", t1},
{"Test_File_Gather_Widget", t2},
{"Test_File_Play_Widget", t3},
{"表格", create_table_view()},
{"", create_Tree_View()},
}));
auto Qt_raw_widget = new QStandardItem("Qt原生元素");
Qt_raw_widget->appendRows(get_list({
// QSizeGrip 一个改变大小的注脚
// QDesktopWidget 不知道干嘛的
// QFocusFrame 不知道干嘛的
{"QKeySequenceEdit", new QKeySequenceEdit},
{"Combo_Box_Example", new Combo_Box_Example},
// 像QWidget 但不知到有什么区别
{"QPushButton", new QPushButton},
{"QFrame", new QFrame},
{"QStatusBar", new QStatusBar},
{"QGroupBox", new QGroupBox},
{"QSplashScreen", new QSplashScreen},
{"QAbstractSlider", new QAbstractSlider},
{"QRubberBand::Line", new QRubberBand(QRubberBand::Line)},
{"QRubberBand::Rectangle", new QRubberBand(QRubberBand::Rectangle)},
{"QProgressBar", new QProgressBar()},
{"QDialog", new QDialog},
{"QTabBar", new QTabBar},
{"QDialogButtonBox", new QDialogButtonBox},
{"QCalendarWidget", new QCalendarWidget},
{"QMenuBar", new QMenuBar},
{"QTabWidget", new QTabWidget},
{"QOpenGLWidget", new QOpenGLWidget},
{"QMdiSubWindow", new QMdiSubWindow},
{"QDockWidget", new QDockWidget},
{"QAbstractSpinBox", new QAbstractSpinBox},
//{"QAbstractButton", new QAbstractButton},
{"QTabBar", new QTabBar},
{"QComboBox", new QComboBox},
{"QMainWindow", new QMainWindow},
{"QMenu", new QMenu},
//{"QWindowContainer", new QWindowContainer},
//{"QDesktopScreenWidget", new QDesktopScreenWidget},
{"QColumnView", new QColumnView},
{"QWizardPage", new QWizardPage},
}));
// change_to("表格");
change_to("Test_File_Gather_Widget");
// change_to("树");
root->appendRows({plottable, base, custom_widget, Qt_raw_widget});
tree_view->setModel(standard_model);
tree_view->expandAll();
QObject::connect(tab_widget, &QTabWidget::tabCloseRequested, [this](int index) {
// 处理标签页关闭请求
qDebug() << "Closing tab at index:" << index;
// 从 QTabWidget 中移除指定的标签页
tab_widget->removeTab(index);
});
QObject::connect(tree_view, &QTreeView::clicked, [this](const QModelIndex& index) {
QStandardItem* item = this->standard_model->itemFromIndex(index);
if (item) {
QString item_name = item->text();
change_to(item_name);
}
});
}
+41
View File
@@ -0,0 +1,41 @@
#pragma once
#include <QHBoxLayout>
#include <QMainWindow>
#include <QStandardItem>
#include <QStandardItemModel>
#include <QTabWidget>
#include <QTreeView>
#include <QVBoxLayout>
#include <QtWidgets>
#include "../Widget/component/export.h"
#include "Afterglow_Plot.h"
#include "Audio_Plot.h"
#include "Normal_test.h"
#include "Planisphere_Plot.h"
#include "Spectrum_Plot.h"
#include "Sweep_Frequent_Plot.h"
#include "Waterfall_Plot.h"
#include "base/Axis_Test.h"
#include "base/Frequency_Axis_Test.h"
#include "base/Multi_Select_Test.h"
#include "base/Time_Axis_Test.h"
class QTreeView;
class QStandardItemModel;
class QStandardItem;
class Demo_Gallery : public QWidget {
public:
Demo_Gallery();
QTreeView* tree_view;
QStandardItemModel* standard_model;
QHBoxLayout* main_layout;
QTabWidget* tab_widget{};
QWidget* cur_widget{};
struct T_Data {
QString name;
QWidget* plot;
};
QMap<QString, QWidget*> data_map;
QStandardItem* get_from_data(const T_Data& data);
QList<QStandardItem*> get_list(const QVector<T_Data>& datas);
void change_to(const QString& name);
};
+296
View File
@@ -0,0 +1,296 @@
#pragma once
#include "../Widget/component/Table/export.h"
#include "../Renderive/base/Tool.h"
namespace Psc {
//
// static QVector<QWidget*> cw(Table_View* view) {
// QVector<QWidget*> ret;
// ret.append({
// renderive::create_edit_widget<int>("隐藏行", [view, m](const int& value) {
// m->row_info_list[value]->hide = true;
// view->update();
// }, 1),
// renderive::create_edit_widget<int>("显示行", [view, m](const int& value) {
// m->row_info_list[value]->hide = false;
// view->update();
// }, 1),
// renderive::create_edit_widget<int>("隐藏列", [view, m](const int& value) {
// m->col_info_list[value]->hide = true;
// view->update();
// }, 1),
// renderive::create_edit_widget<int>("显示列", [view, m](const int& value) {
// m->col_info_list[value]->hide = false;
// view->update();
// }, 1),
//
//
// renderive::create_edit_widget_list<int>("合并单元格", [view, m](const QVector<int>& values) {
// int row = values[0];
// int col = values[1];
// int row_span = values[2];
// int col_span = values[3];
// m->merge(row, col, row_span, col_span);
// view->update();
// }, {4, 4, 4, 4}),
// renderive::create_edit_widget_list<int>("拆分单元格", [view, m](const QVector<int>& values) {
// int row = values[0];
// int col = values[1];
// int row_span = values[2];
// int col_span = values[3];
// m->split(row, col, row_span, col_span);
// view->update();
// }, {4, 4, 2, 4}),
//
// renderive::create_edit_widget_list<int>("添加行", [view, m](const QVector<int>& values) {
// int pos = values[0];
// int num = values[1];
// int col_num = m->col_info_list.size();
// QVector<Base_Table_Model::Row> row_infos;
// for (int i = 0; i < num; i++)
// {
// auto info = std::make_shared<Row_Info>(10, "asdasdasd");
// row_infos.append(info);
// }
// QVector<QVector<Base_Table_Model::Cell>> data;
// for (int i = 0; i < num; i++)
// {
// QVector<Base_Table_Model::Cell> row;
// for (int j = 0; j < col_num; j++)
// {
// auto cur = std::make_shared<Table_Data>();
// cur->content = "2222";
// row.append(cur);
// }
// data.append(row);
// }
//
// m->insert_row(pos, row_infos, data);
// view->update();
// }, {4, 1}),
//
// renderive::create_edit_widget_list<int>("添加列", [view, m](const QVector<int>& values) {
// int pos = values[0];
// int num = values[1];
// int row_num = m->row_info_list.size();
// QVector<Base_Table_Model::Col> col_infos;
// for (int i = 0; i < num; i++)
// {
// auto info = std::make_shared<Col_Info>(10, "asdasdasd");
// col_infos.append(info);
// }
// QVector<QVector<Base_Table_Model::Cell>> data;
// for (int i = 0; i < num; i++)
// {
// QVector<Base_Table_Model::Cell> col;
// for (int j = 0; j < row_num; j++)
// {
// auto cur = std::make_shared<Table_Data>();
// cur->content = "2222";
// col.append(cur);
// }
// data.append(col);
// }
//
// m->insert_col(pos, col_infos, data);
// view->update();
// }, {5, 1}),
//
// renderive::create_edit_widget_list<int>("重新设置所有行列内容", [view, m](const QVector<int>& values) {
// for (int i = 0; i < m->total_col(); i++)
// {
// m->col_info_list[i]->content = QString("%1").arg(i);
// }
// for (int i = 0; i < m->total_row(); i++)
// {
// m->row_info_list[i]->content = QString("%1").arg(i);
// }
// for (int i = 0; i < m->total_row(); i++)
// {
//
// for (int j = 0; j < m->total_col(); j++)
// {
// auto d = m->data[i][j];
// d->content = QString("[%1,%2]").arg(i).arg(j);
// }
// }
// view->update();
// }, {}),
// });
//
// return ret;
// }
static QVector<QWidget*> cw(Table_View* view) {
QVector<QWidget*> ret;
auto m = dynamic_cast<Memory_Table_Model*>(view->model);
ret.append({
renderive::create_edit_widget<int>("隐藏行", [view, m](const int& value) {
m->get_row_info(value)->hide = true;
view->update(); }, 1),
renderive::create_edit_widget<int>("显示行", [view, m](const int& value) {
m->get_row_info(value)->hide = false;
view->update(); }, 1),
renderive::create_edit_widget<int>("隐藏列", [view, m](const int& value) {
m->get_col_info(value)->hide = true;
view->update(); }, 1),
renderive::create_edit_widget<int>("显示列", [view, m](const int& value) {
m->get_col_info(value)->hide = false;
view->update(); }, 1),
renderive::create_edit_widget_list<int>("合并单元格", [view, m](const QVector<int>& values) {
int row = values[0];
int col = values[1];
int row_span = values[2];
int col_span = values[3];
m->merge(row, col, row_span, col_span);
view->update(); }, {4, 4, 4, 4}),
renderive::create_edit_widget_list<int>("拆分单元格", [view, m](const QVector<int>& values) {
int row = values[0];
int col = values[1];
int row_span = values[2];
int col_span = values[3];
m->split(row, col, row_span, col_span);
view->update(); }, {4, 4, 2, 4}),
renderive::create_edit_widget_list<int>("添加行", [view, m](const QVector<int>& values) {
int pos = values[0];
int num = values[1];
int col_num = m->total_col();
QVector<Row_Info*> row_infos;
for (int i = 0; i < num; i++) {
auto info = new Row_Info(10, "asdasdasd");
row_infos.append(info);
}
QVector<QVector<Base_Table_Data*>> data;
for (int i = 0; i < num; i++) {
QVector<Base_Table_Data*> row;
for (int j = 0; j < col_num; j++) {
auto cur = new Table_Paint_Data("");
cur->content = "2222";
row.append(cur);
}
data.append(row);
}
m->insert_row(pos, row_infos, data, Edge_Expand_Type::None);
view->update(); }, {4, 1}),
renderive::create_edit_widget_list<int>("添加列", [view, m](const QVector<int>& values) {
int pos = values[0];
int num = values[1];
int row_num = m->total_row();
QVector<Col_Info*> col_infos;
for (int i = 0; i < num; i++) {
auto info = new Col_Info(10, "asdasdasd");
col_infos.append(info);
}
QVector<QVector<Base_Table_Data*>> data;
for (int i = 0; i < num; i++) {
QVector<Base_Table_Data*> col;
for (int j = 0; j < row_num; j++) {
auto cur = new Table_Paint_Data("");
cur->content = "2222";
col.append(cur);
}
data.append(col);
}
m->insert_col(pos, col_infos, data, Edge_Expand_Type::None);
view->update(); }, {5, 1}),
renderive::create_edit_widget_list<int>("重新设置所有行列内容", [view, m](const QVector<int>& values) {
for (int i = 0; i < m->total_col(); i++) {
m->get_col_info(i)->content = QString("%1").arg(i);
}
for (int i = 0; i < m->total_row(); i++) {
m->get_row_info(i)->content = QString("%1").arg(i);
}
for (int i = 0; i < m->total_row(); i++) {
for (int j = 0; j < m->total_col(); j++) {
auto d = (Table_Paint_Data*)m->get_table_data(i, j);
d->content = QString("[%1,%2]").arg(i).arg(j);
}
}
view->update(); }, {}),
});
return ret;
}
inline Table_View* create_table_view2() {
struct Table_View2 : Table_View {
QMenu* menu{};
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
// menu = create_menu_normal(this, cw(this));
menu = create_menu_normal(this, cw(this));
}
menu->exec(event->globalPos());
}
};
auto ret = new Table_View2;
int row_num = 10;
int col_num = 10;
// int row_num = 14;
// int col_num = 15;
auto m = new Memory_Table_Model();
ret->model = m;
QVector<Col_Info*> col_infos;
for (int i = 0; i < col_num; ++i) {
col_infos.push_back(new Col_Info(80, QString::number(i)));
}
QVector<QVector<Base_Table_Data*>> data;
data.resize(col_infos.size());
m->insert_col(0, col_infos, data, Edge_Expand_Type::None);
for (int i = 0; i < row_num; ++i) {
auto row_info = new Row_Info(50, QString::number(i));
QVector<Base_Table_Data*> row;
for (int j = 0; j < col_num; ++j) {
auto d = new Table_Paint_Data("");
d->parent = d;
d->content = QString("(%1,%2)").arg(i).arg(j);
row.push_back(d);
}
m->insert_row(m->total_row(), {row_info}, {row}, Edge_Expand_Type::Positive);
}
return ret;
}
inline Table_View* create_table_view() {
struct Table_View2 : Table_View {
QMenu* menu{};
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
// menu = create_menu_normal(this, cw(this));
menu = create_menu_normal(this, cw(this));
}
menu->exec(event->globalPos());
}
};
auto ret = new Table_View2;
int row_num = 10;
int col_num = 10;
// int row_num = 14;
// int col_num = 15;
auto m = new Memory_Table_Model;
ret->model = m;
for (int i = 0; i < col_num; ++i) {
m->col_info_list.push_back(new Col_Info(80, QString::number(i)));
}
for (int i = 0; i < row_num; ++i) {
m->row_info_list.push_back(new Row_Info(50, QString::number(i)));
}
for (int i = 0; i < col_num; ++i) {
QVector<Base_Table_Data*> row;
for (int j = 0; j < row_num; ++j) {
auto d = new Table_Paint_Data("");
d->parent = d;
d->content = QString("(%1,%2)").arg(i).arg(j);
row.push_back(d);
}
m->data.push_back(row);
}
{
auto t = new Widget_Data();
t->widget = new QPushButton("222222");
m->data[2][2] = t;
}
// ret->model->merage(2, 2, 4, 4);
//
// ret->model->row_info_list[2]->hide = true;
// ret->model->col_info_list[2]->hide = true;
// ret->model->col_info_list[3]->hide = true;
// ret->model->col_info_list[4]->hide = true;
return ret;
}
} // namespace Psc
+52
View File
@@ -0,0 +1,52 @@
#pragma once
#include "../Renderive/base/Tool.h"
static QWidget* create_planisphere_plot() {
class Time_Axis;
class Planisphere_Plot : public renderive::Plot {
public:
std::shared_ptr<renderive::Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
std::shared_ptr<renderive::Planisphere> planisphere{};
std::shared_ptr<renderive::Multi_Select_Rect> msr{};
QMenu* menu{};
void init() override {
Plot::init();
object_name = "PlanispherePlot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Axis::Builder(axis, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical).build();
planisphere = renderive::Planisphere::Builder(data, x_axis, y_axis)
.set_continue_millisecond(2000)
.build();
msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height() - 1);
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
planisphere->set_to_axis_center();
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws =
bw(cw(planisphere.get(), -1), "星座图") +
bw(cw(x_axis.get()), "I轴") +
bw(cw(y_axis.get()), "Q轴");
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
}
};
auto w = new Planisphere_Plot;
w->init();
return w;
}
+62
View File
@@ -0,0 +1,62 @@
#pragma once
#include "../Renderive/base/Tool.h"
static QWidget* create_spectrun_plot() {
class Spectrum_Plot : public renderive::Plot {
public:
std::shared_ptr<renderive::Frequency_Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
std::shared_ptr<renderive::Multi_Select_Rect> msr{};
std::shared_ptr<renderive::Spectrum> sp{};
QMenu* menu{};
void init() override {
Plot::init();
object_name = "Spectrum_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis, Qt::Horizontal)
.set_coord_range({0, 100})
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_use_wheel(true)
.set_use_drag(true)
.build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical)
.set_coord_range({100, 0})
.set_unit_text("功率")
.set_use_drag(true)
.build();
sp = renderive::Spectrum::Builder(data, x_axis, y_axis)
.set_frequency_range({0, 100})
.build();
msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
int left_margin = 20, right_margin = 20, top_margin = 20, bottom_margin = 20;
int w = width() - left_margin - right_margin;
int h = height() - top_margin - bottom_margin;
x_axis->set_x(left_margin);
x_axis->set_y(height() - bottom_margin);
x_axis->set_pixel_size(w);
y_axis->set_x(left_margin);
y_axis->set_y(top_margin);
y_axis->set_pixel_size(h);
sp->set_frequency_point_size(sp->frequency_axis()->get_pixel_point_size());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws =
bw(cw(sp.get(), -1), "频谱图") +
bw(cw(x_axis.get()), "频率x轴") +
bw(cw(y_axis.get()), "功率y轴") +
bw(cw(msr.get()), "多选框");
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
}
};
auto w = new Spectrum_Plot;
w->init();
return w;
}
+55
View File
@@ -0,0 +1,55 @@
#pragma once
#include "../Renderive/base/Tool.h"
static QWidget* create_sweep_frequent_plot() {
class Sweep_Frequent_Plot : public renderive::Plot {
public:
std::shared_ptr<renderive::Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
std::shared_ptr<renderive::Multi_Select_Rect> msr{};
std::shared_ptr<renderive::Sweep_Frequency> sf{};
QMenu* menu{};
void init() override {
Plot::init();
object_name = "Axis_Test_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Axis::Builder(axis, Qt::Horizontal)
.set_coord_range({0, 100})
.set_tick_length(-10)
.build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical)
.set_coord_range({100, 0})
.build();
sf = renderive::Sweep_Frequency::Builder(data, x_axis, y_axis)
.set_block_num(200)
.set_block_frequency_point_size(20)
.set_frequency_range({0, 100})
.build();
msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height() - 1);
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws =
bw(cw(sf.get(), -1), "扫频图") +
bw(cw(x_axis.get()), "x轴") +
bw(cw(y_axis.get()), "y轴") +
bw(cw(msr.get()), "多选框");
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
}
};
auto w = new Sweep_Frequent_Plot;
w->init();
return w;
}
+56
View File
@@ -0,0 +1,56 @@
#pragma once
#include "../Renderive/base/Tool.h"
static QWidget* create_water_fall_plot() {
class Waterfall_Plot : public renderive::Plot {
public:
std::shared_ptr<renderive::Frequency_Axis> x_axis{};
std::shared_ptr<renderive::Time_Axis> y_axis{};
std::shared_ptr<renderive::Multi_Select_Rect> msr{};
std::shared_ptr<renderive::Waterfall> wf{};
QMenu* menu{};
void init() override {
Plot::init();
object_name = "Water_Fall_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
y_axis = renderive::Time_Axis::Builder(axis, Qt::Vertical)
.set_time_point_size(800)
.build();
wf = renderive::Waterfall::Builder(data, x_axis, y_axis)
.set_frequency_range({0, 20})
.build();
msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height());
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
y_axis->set_time_point_size(height());
// wf->set_frequency_point_size(wf->frequency_axis()->get_pixel_point_size());
wf->set_frequency_point_size(width());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws =
bw(cw(wf.get(), -1), "瀑布图") +
bw(cw(x_axis.get()), "频率轴") +
bw(cw(y_axis.get()), "时间轴") +
bw(cw(msr.get()), "多选框");
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
}
};
auto w = new Waterfall_Plot;
w->init();
return w;
}
+38
View File
@@ -0,0 +1,38 @@
#pragma once
#include "../../Renderive/base/Tool.h"
static QWidget* create_axis_test_plot() {
class Axis_Test_Plot : public renderive::Plot {
public:
std::shared_ptr<renderive::Axis> axis{};
QMenu* menu{};
void init() override {
Plot::init();
object_name = "Axis_Test_Plot";
auto axis_node = create_renderable_node(get_root_renderable(), "Axis_Renderable");
axis = renderive::Axis::Builder(axis_node, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_coord_range({-12000, 12000})
.set_use_wheel(true)
.build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
int space = 50;
axis->set_x(space);
axis->set_y(height() / 2);
axis->set_pixel_size(width() - space * 2);
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws =
bw(cw(axis.get()), "");
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
}
};
auto w = new Axis_Test_Plot;
w->init();
return w;
}
+35
View File
@@ -0,0 +1,35 @@
#pragma once
#include "../../Renderive/base/Tool.h"
static QWidget* create_time_axis_test_plot() {
class Axis_Test_Plot : public renderive::Plot {
public:
std::shared_ptr<renderive::Time_Axis> axis{};
QMenu* menu{};
void init() override {
Plot::init();
object_name = "TimeAxisTestPlot";
auto axis_node = create_renderable_node(get_root_renderable(), "Axis_Renderable");
axis = renderive::Time_Axis::Builder(axis_node, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
}
protected:
void resizeEvent(QResizeEvent* event) override {
int space = 50;
axis->set_x(space);
axis->set_y(height() / 2);
axis->set_pixel_size(width() - space * 2);
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws = bw(cw(axis.get(), 30), "时间轴");
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
}
};
auto w = new Axis_Test_Plot;
w->init();
return w;
}
+14
View File
@@ -0,0 +1,14 @@
#pragma once
#include "Afterglow_Plot.h"
#include "Audio_Plot.h"
#include "Demo_Gallery.h"
#include "Normal_test.h"
#include "Planisphere_Plot.h"
#include "Spectrum_Plot.h"
#include "Sweep_Frequent_Plot.h"
#include "../Renderive/base/Tool.h"
#include "Waterfall_Plot.h"
#include "base/Axis_Test.h"
#include "base/Frequency_Axis_Test.h"
#include "base/Multi_Select_Test.h"
#include "base/Time_Axis_Test.h"
-207
View File
@@ -1,207 +0,0 @@
#include <QApplication>
#include <QWidget>
#ifdef _WINDOWS
#include <QTextCodec>
#include <Windows.h>
#endif
#include <QStyle>
#include <QWidget>
#include <QtWidgets>
#include "YSGraphic_Core/Demo_Gallery/export.h"
#include "YSGraphic_Core/export.h"
namespace Table_Space {
struct Base_Table_Model {
virtual ~Base_Table_Model() = default;
using Len_Type = int;
using Index_Type = int;
enum Expand_Type {
None,
Left_UP,
Right_Down,
};
enum Data_Type {
Parent,
Son,
Normal
};
struct Base_Data {
virtual ~Base_Data() = default;
virtual void paint(QPainter* painter, QRect rect) = 0;
QWidget* widget{};
};
struct Base_Info {
virtual ~Base_Info() = default;
Len_Type len = 0;
virtual void paint(QPainter* painter, QRect rect) = 0;
};
virtual void insert_row(Index_Type pos, std::vector<std::shared_ptr<Base_Info>> rows, Expand_Type expand) = 0;
virtual void insert_col(Index_Type pos, std::vector<std::shared_ptr<Base_Info>> cols, Expand_Type expand) = 0;
virtual void remove_row(Index_Type pos, Index_Type row) = 0;
virtual void remove_col(Index_Type pos, Index_Type col) = 0;
virtual void merge(Index_Type col, Index_Type row, Index_Type col_len, Index_Type row_len) = 0;
virtual void split(Index_Type col, Index_Type row, Index_Type col_len, Index_Type row_len) = 0;
virtual QPoint span(Index_Type col, Index_Type row) = 0; // 获取某一个元素 横跨行数,列数
virtual std::shared_ptr<Base_Data> data(Index_Type col, Index_Type row) = 0;
virtual std::shared_ptr<Base_Data> parent(Index_Type col, Index_Type row) = 0;
virtual Data_Type type(Index_Type col, Index_Type row) = 0;
int col_space = 14;
int row_space = 14;
};
struct Table_Model : public Base_Table_Model {
struct Data : Base_Data {
std::shared_ptr<Data> parent = nullptr;
void paint(QPainter* painter, QRect rect) override {
painter->fillRect(rect, Qt::red);
painter->drawText(rect, Qt::AlignCenter, text);
}
QString text;
Data_Type type;
};
using Dp = std::shared_ptr<Data>;
using Dpl = std::vector<Dp>;
struct Info : Base_Info {
void paint(QPainter* painter, QRect rect) override {
painter->fillRect(rect, Qt::red);
painter->drawText(rect, Qt::AlignCenter, text);
}
QString text;
Dpl data;
};
~Table_Model() override;
void check_all() {
}
void insert_row(Index_Type pos, std::vector<std::shared_ptr<Base_Info>> rows, Expand_Type expand) override {
}
void insert_col(Index_Type pos, std::vector<std::shared_ptr<Base_Info>> insert_cols, Expand_Type expand) override {
}
void remove_row(Index_Type pos, Index_Type num) override {
auto start = rows.begin() + pos;
rows.erase(start, start + num);
const auto n = rows.size();
for (int i = 0; i < n; ++i) {
auto& l = cols.at(i);
auto s = l->data.begin() + pos;
l->data.erase(s, s + num);
}
}
void remove_col(Index_Type pos, Index_Type num) override {
auto start = cols.begin() + pos;
cols.erase(start, start + num);
const auto n = rows.size();
for (int i = 0; i < n; ++i) {
auto& l = rows.at(i);
auto s = l->data.begin() + pos;
l->data.erase(s, s + num);
}
}
void merge(Index_Type col, Index_Type row, Index_Type col_len, Index_Type row_len) override {
const auto par = cols.at(col)->data.at(row);
const auto cn = cols.size();
const auto rn = rows.size();
for (auto c = col; c < cn; ++c) {
for (auto r = row; r < rn; ++r) {
const auto d = cols.at(c)->data.at(r);
d->type = Son;
d->parent = par;
}
}
par->type = Parent;
}
void split(Index_Type col, Index_Type row, Index_Type col_len, Index_Type row_len) override {
const auto cn = cols.size();
const auto rn = rows.size();
for (auto c = col; c < cn; ++c) {
for (auto r = row; r < rn; ++r) {
const auto d = cols.at(c)->data.at(r);
d->type = Normal;
d->parent = d;
}
}
}
QPoint span(Index_Type col, Index_Type row) override {
const auto d = cols.at(col)->data.at(row);
if (d->type == Normal)
return {1, 1};
if (d->type == Son)
return {0, 0};
if (d->type == Parent) {
Index_Type cur_col = col + 1;
while (cur_col < cols.size()) {
auto c = cols.at(cur_col)->data.at(row);
if (c->parent != d)
break;
cur_col++;
}
Index_Type cur_row = row + 1;
while (cur_row < rows.size()) {
auto c = rows.at(col)->data.at(cur_row);
if (c->parent != d)
break;
cur_row++;
}
return {cur_col - col, cur_row - row};
}
printf("span unknown type[%d]!", d->type);
ASSERT(false, "span unknown type!");
}
std::shared_ptr<Base_Data> data(Index_Type col, Index_Type row) override {
return cols.at(col)->data.at(row);
}
std::shared_ptr<Base_Data> parent(Index_Type col, Index_Type row) override {
auto d = cols.at(col)->data.at(row);
return d->parent;
}
Data_Type type(Index_Type col, Index_Type row) override {
auto d = cols.at(col)->data.at(row);
return d->type;
}
private:
std::vector<std::shared_ptr<Info>> cols;
std::vector<std::shared_ptr<Info>> rows;
};
} // namespace Table_Space
class Base_Widget : public QWidget {
public:
Base_Widget() {
// 初始化按钮,放置在 widget 中
QPushButton* btn = new QPushButton("你好", this);
btn->setGeometry(50, 50, 500, 30); // 设置按钮的位置和大小
QPushButton* btn2 = new QPushButton("按钮2", this);
btn2->setGeometry(150, 150, 100, 30); // 这个按钮部分会超出父控件区域
}
protected:
void paintEvent(QPaintEvent* event) override {
QPainter painter(this);
// 设置父控件背景颜色
painter.fillRect(rect(), Qt::black);
// 定义裁剪区域(在父控件内的有效区域)
QRegion region(0, 0, 300, 300); // 设置裁剪区域为 300x300,超出部分隐藏
setMask(region); // 设置掩膜,超出区域将不会显示
QWidget::paintEvent(event); // 默认绘制子控件
}
};
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
#ifdef _WINDOWS
SetConsoleOutputCP(CP_UTF8);
system("chcp 65001");
// setbuf(stdout, 0);
#endif
QElapsedTimer timer;
timer.start();
Demo_Gallery w;
// Base_Widget w;
w.resize(1000, 600);
w.show();
// YSG::Graphic g;
// g.resize(1000, 600);
// g.show();
// auto it = new YSG::SelectColorDialog();
// it->resize(1000, 600);
// it->show();
YSG::start_render_scheduler();
qDebug() << "启动耗时 " << timer.elapsed();
// f();
return QApplication::exec();
}