命名规范
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -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);
|
||||
};
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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"
|
||||
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user