165 lines
6.2 KiB
C++
165 lines
6.2 KiB
C++
#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);
|
|
}
|
|
std::vector<QStandardItem*> Demo_Gallery::get_list(const std::vector<T_Data>& datas) {
|
|
std::vector<QStandardItem*> ret;
|
|
for (const T_Data& data : datas) {
|
|
ret.push_back(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 append_rows = [](QStandardItem* parent, const std::vector<QStandardItem*>& rows) {
|
|
for (QStandardItem* row : rows)
|
|
parent->appendRow(row);
|
|
};
|
|
auto plottable = new QStandardItem("plottable");
|
|
append_rows(plottable, 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("基础元素");
|
|
append_rows(base, 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("自定义控件");
|
|
append_rows(custom_widget, 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原生元素");
|
|
append_rows(Qt_raw_widget, 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->appendRow(plottable);
|
|
root->appendRow(base);
|
|
root->appendRow(custom_widget);
|
|
root->appendRow(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);
|
|
}
|
|
});
|
|
}
|