diff --git a/.vscode/settings.json b/.vscode/settings.json index 2eae3d3..55e691f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -91,7 +91,8 @@ "qtconcurrent": "cpp", "qcombobox": "cpp", "qvariant": "cpp", - "qlineedit": "cpp" + "qlineedit": "cpp", + "qhboxlayout": "cpp" }, "files.autoGuessEncoding": false, } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 94f1500..a1d01f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,9 @@ set(PROJECT_SOURCES iflytop_canbus/iflytop_canbus_master.cpp iflytop_canbus/waveshare_can.cpp + + libzqt/zui/z_function_list_box.cpp + libzqt/zui/zq_vtab_page.cpp ) diff --git a/libzqt/zui/z_function_list_box.cpp b/libzqt/zui/z_function_list_box.cpp new file mode 100644 index 0000000..4e0f4f5 --- /dev/null +++ b/libzqt/zui/z_function_list_box.cpp @@ -0,0 +1,62 @@ +#include "z_function_list_box.hpp" + +using namespace iflytop; +using namespace std; +ZQFunctionListBox::ZQFunctionListBox(QWidget *parent, const QString &title, int column) : QGroupBox(parent) { // + + // Box init + this->setTitle(title); + QGridLayout *layout = new QGridLayout(this); + this->setLayout(layout); + m_layout = layout; + // m_layout->setColumnMinimumWidth(column, 0); + m_column = column; + + // add QSpacer + QSpacerItem *verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); + // m_itermNum++; + m_layout->addItem(verticalSpacer, 0, 0,1,1); +} + +void ZQFunctionListBox::regOnException(function onException) { m_onException = onException; } +void ZQFunctionListBox::newFunc(QString zh_name, QStringList params, std::function onButtonClick) { + int rowcnt = m_layout->rowCount(); + QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); + sizePolicy.setHorizontalStretch(1); + sizePolicy.setVerticalStretch(0); + + QPushButton *button = new QPushButton(this); + button->setText(zh_name); + button->setMinimumHeight(30); + button->setSizePolicy(sizePolicy); + m_layout->addWidget(button, rowcnt, 0,1,1); + + QList lineEdits; + + for (int i = 0; i < params.size(); i++) { + QLineEdit *lineEdit = new QLineEdit(this); + lineEdit->setMinimumHeight(30); + lineEdit->setSizePolicy(sizePolicy); + lineEdit->setPlaceholderText(params[i]); + lineEdits.push_back(lineEdit); + m_layout->addWidget(lineEdit, rowcnt, i + 1,1,1); + } + + connect(button, &QPushButton::clicked, this, [onButtonClick, lineEdits, this]() { + vector params; + for (int i = 0; i < lineEdits.size(); i++) { + params.push_back(lineEdits[i]->text().toStdString()); + } + char *args[params.size()]; + for (int i = 0; i < params.size(); i++) { + args[i] = (char *)params[i].c_str(); + } + try { + onButtonClick(params.size(), (const char **)args); + } catch (const std::zexception &e) { + if (m_onException) { + m_onException(e); + } + } + }); +} diff --git a/libzqt/zui/z_function_list_box.hpp b/libzqt/zui/z_function_list_box.hpp new file mode 100644 index 0000000..4afc6a0 --- /dev/null +++ b/libzqt/zui/z_function_list_box.hpp @@ -0,0 +1,67 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// +#include + +#include "../zexception.hpp" + +namespace iflytop { +using namespace std; + +/** + * @brief 构造样式如下 + * + * +TAB---------------------------------+ + * |---BOX---------------------------| + * | |Button|Param|Param| | + * | |Button|Param|Param| | + * | |Button|Param|Param| | + * |---------------------------------| + * + */ + +class ZQFunctionListBox : public QGroupBox { + Q_OBJECT + public: + function m_onException; + + private: + QGridLayout *m_layout = nullptr; + int m_itermNum = 0; + int m_column = 1; + + public: + ZQFunctionListBox(QWidget *parent, const QString &title, int column); + + void regOnException(function onException); + void newFunc(QString zh_name, QStringList params, std::function onButtonClick); +}; +} // namespace iflytop diff --git a/libzqt/zui/z_reg_table_list_box.cpp b/libzqt/zui/z_reg_table_list_box.cpp new file mode 100644 index 0000000..e69de29 diff --git a/libzqt/zui/z_reg_table_list_box.hpp b/libzqt/zui/z_reg_table_list_box.hpp new file mode 100644 index 0000000..e69de29 diff --git a/libzqt/zui/zq_vtab_page.cpp b/libzqt/zui/zq_vtab_page.cpp new file mode 100644 index 0000000..382109a --- /dev/null +++ b/libzqt/zui/zq_vtab_page.cpp @@ -0,0 +1,16 @@ + +#include "zq_vtab_page.hpp" + +using namespace iflytop; +using namespace std; + +ZQVTabPage::ZQVTabPage(QTabWidget *fathertab, const QString &zh_name) : QWidget(fathertab) { // + QVBoxLayout *verticalLayout = new QVBoxLayout(this); // 设置布局 + this->setLayout(verticalLayout); + m_layout = verticalLayout; + + fathertab->insertTab(fathertab->count(), this, zh_name); +} +void ZQVTabPage::addBox(QGroupBox *box) { + m_layout->addWidget(box); +} \ No newline at end of file diff --git a/libzqt/zui/zq_vtab_page.hpp b/libzqt/zui/zq_vtab_page.hpp new file mode 100644 index 0000000..fec6276 --- /dev/null +++ b/libzqt/zui/zq_vtab_page.hpp @@ -0,0 +1,50 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// +#include + +#include "../zexception.hpp" + + +namespace iflytop { +using namespace std; +class ZQVTabPage : public QWidget { + Q_OBJECT + public: + private: + QVBoxLayout *m_layout; + int m_itermNum = 0; + + public: + ZQVTabPage(QTabWidget *fathertab, const QString &zh_name); + void addBox(QGroupBox *box); +}; +} // namespace iflytop diff --git a/mainwindow.ui b/mainwindow.ui index bc35ec3..e4ab154 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -711,7 +711,7 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { - + 1 @@ -937,9 +937,6 @@ p, li { white-space: pre-wrap; } 波形串口设置 - - - @@ -947,9 +944,6 @@ p, li { white-space: pre-wrap; } - - - @@ -957,6 +951,9 @@ p, li { white-space: pre-wrap; } + + + @@ -964,6 +961,9 @@ p, li { white-space: pre-wrap; } + + + @@ -971,6 +971,19 @@ p, li { white-space: pre-wrap; } + + + + Qt::Vertical + + + + 20 + 40 + + + +