diff --git a/libzqt/zui/z_function_list_box.cpp b/libzqt/zui/z_function_list_box.cpp index 4e0f4f5..4aaee71 100644 --- a/libzqt/zui/z_function_list_box.cpp +++ b/libzqt/zui/z_function_list_box.cpp @@ -4,23 +4,32 @@ using namespace iflytop; using namespace std; ZQFunctionListBox::ZQFunctionListBox(QWidget *parent, const QString &title, int column) : QGroupBox(parent) { // + QVBoxLayout *tablayout = qobject_cast(parent->layout()); + // Box init this->setTitle(title); QGridLayout *layout = new QGridLayout(this); this->setLayout(layout); m_layout = layout; - // m_layout->setColumnMinimumWidth(column, 0); + m_layout->setColumnMinimumWidth(column, column); m_column = column; // add QSpacer QSpacerItem *verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); + m_verticalSpacer = verticalSpacer; // m_itermNum++; - m_layout->addItem(verticalSpacer, 0, 0,1,1); + m_layout->addItem(m_verticalSpacer, 0, 0, 1, 1); + // m_layout->removeItem(m_verticalSpacer); + + tablayout->addWidget(this); } void ZQFunctionListBox::regOnException(function onException) { m_onException = onException; } void ZQFunctionListBox::newFunc(QString zh_name, QStringList params, std::function onButtonClick) { - int rowcnt = m_layout->rowCount(); + m_layout->removeItem(m_verticalSpacer); + + int rowcnt = m_layout->rowCount(); + QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); sizePolicy.setHorizontalStretch(1); sizePolicy.setVerticalStretch(0); @@ -29,7 +38,7 @@ void ZQFunctionListBox::newFunc(QString zh_name, QStringList params, std::functi button->setText(zh_name); button->setMinimumHeight(30); button->setSizePolicy(sizePolicy); - m_layout->addWidget(button, rowcnt, 0,1,1); + m_layout->addWidget(button, rowcnt, 0, 1, 1); QList lineEdits; @@ -39,7 +48,7 @@ void ZQFunctionListBox::newFunc(QString zh_name, QStringList params, std::functi lineEdit->setSizePolicy(sizePolicy); lineEdit->setPlaceholderText(params[i]); lineEdits.push_back(lineEdit); - m_layout->addWidget(lineEdit, rowcnt, i + 1,1,1); + m_layout->addWidget(lineEdit, rowcnt, i + 1, 1, 1); } connect(button, &QPushButton::clicked, this, [onButtonClick, lineEdits, this]() { @@ -59,4 +68,6 @@ void ZQFunctionListBox::newFunc(QString zh_name, QStringList params, std::functi } } }); + + m_layout->addItem(m_verticalSpacer, rowcnt + 1, 0, 1, 1); } diff --git a/libzqt/zui/z_function_list_box.hpp b/libzqt/zui/z_function_list_box.hpp index 4afc6a0..56dd959 100644 --- a/libzqt/zui/z_function_list_box.hpp +++ b/libzqt/zui/z_function_list_box.hpp @@ -58,6 +58,8 @@ class ZQFunctionListBox : public QGroupBox { int m_itermNum = 0; int m_column = 1; + QSpacerItem *m_verticalSpacer; + public: ZQFunctionListBox(QWidget *parent, const QString &title, int column); diff --git a/mainwindow.cpp b/mainwindow.cpp index b2a8d69..bc1471b 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -13,6 +13,8 @@ #include "logger.hpp" #include "qt_serial_datachannel.hpp" #include "zexception.hpp" +#include "zui/z_function_list_box.hpp" +#include "zui/zq_vtab_page.hpp" using namespace std; using namespace iflytop; using namespace zcr; @@ -21,11 +23,9 @@ typedef enum { kthree_lead_ecg, } device_type_t; -static MainWindow *m_mainWindow; -static QTDataChannel G_QTDataChannel; -static QTDataChannel G_WaveDataChannel; - - +static MainWindow *m_mainWindow; +static QTDataChannel G_QTDataChannel; +static QTDataChannel G_WaveDataChannel; QT_REQUIRE_CONFIG(groupbox); @@ -286,105 +286,6 @@ void MainWindow::constructBaseUI() { void MainWindow::displayInfo(bool suc, QString info) {} -/*********************************************************************************************************************** - * 页面构造工具 * - ***********************************************************************************************************************/ - -/** - * @brief 构造样式如下 - * - * +TAB---------------------------------+ - * |---BOX---------------------------| - * | |Button|Param|Param| | - * | |Button|Param|Param| | - * | |Button|Param|Param| | - * |---------------------------------| - * |---BOX---------------------------| - * | |Button|Param|Param| | - * | |Button|Param|Param| | - * | |Button|Param|Param| | - * |---------------------------------| - * - * - */ -QWidget *MainWindow::allocNewTab(QString zh_name) { - QWidget *newtab = new QWidget(); - QVBoxLayout *verticalLayout = new QVBoxLayout(newtab); // 设置布局 - newtab->setLayout(verticalLayout); - - // 添加Tab - ui->buttonTabWidget->insertTab(0,newtab, QString()); - ui->buttonTabWidget->setTabText(ui->buttonTabWidget->indexOf(newtab), zh_name); - return newtab; -} - -void MainWindow::endAllocNewTab(QWidget *tab) { - QVBoxLayout *layout = qobject_cast(tab->layout()); - layout->addItem(new QSpacerItem(20, 445, QSizePolicy::Minimum, QSizePolicy::Expanding)); -} - -QGroupBox *MainWindow::allocNewBox(QWidget *tab, QString zh_name, int column) { - QVBoxLayout *tablayout = qobject_cast(tab->layout()); - - QGroupBox *groupBox = new QGroupBox(tab); // 创建BOX - QGridLayout *gridLayout = new QGridLayout(groupBox); // 创建布局 - groupBox->setLayout(gridLayout); // 设置布局 - gridLayout->setColumnMinimumWidth(column, column); - - tablayout->addWidget(groupBox); - return groupBox; -} - -void MainWindow::endAllocNewBox(QGroupBox *box) { // - QGridLayout *layout = qobject_cast(box->layout()); - QSpacerItem *verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); - layout->addItem(verticalSpacer, layout->rowCount(), 0, 1, 1); -} - -void MainWindow::addNewButtonStyle1(QWidget *box, QString zh_name, QStringList params, std::function onButtonClick) { // - - QGridLayout *layout = qobject_cast(box->layout()); - int rowcnt = layout->rowCount(); - - QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); - sizePolicy.setHorizontalStretch(1); - sizePolicy.setVerticalStretch(0); - - QPushButton *button = new QPushButton(box); - button->setText(zh_name); - button->setMinimumHeight(30); - button->setSizePolicy(sizePolicy); - layout->addWidget(button, rowcnt, 0, 1, 1); - - QList lineEdits; - - for (int i = 0; i < params.size(); i++) { - QLineEdit *lineEdit = new QLineEdit(box); - lineEdit->setMinimumHeight(30); - // lineEdit->sizePolicy().setHorizontalStretch(1); - lineEdit->setSizePolicy(sizePolicy); - lineEdit->setPlaceholderText(params[i]); - lineEdits.push_back(lineEdit); - 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) { - processException(e); - } - }); -} - MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { /** * @brief QT初始化 @@ -429,18 +330,11 @@ void MainWindow::processException(const zexception &e) { // void MainWindow::constructAppUI() { { - QWidget *tab = allocNewTab("模块操作"); - { - QGroupBox *box = allocNewBox(tab, "模块基础操作", 4); - addNewButtonStyle1(box, "扫描模块", {"deviceId"}, [](int argn, const char **args) { // - IflytopCanbusMaster::ins()->callcmd(atoi(args[0]), kmodule_ping); - }); - - - - - endAllocNewBox(box); - } - endAllocNewTab(tab); + ZQVTabPage *tab = new ZQVTabPage(ui->buttonTabWidget, "模块操作"); + ZQFunctionListBox *box = new ZQFunctionListBox(tab, "模块基础操作", 4); + box->regOnException([this](const zexception &e) { processException(e); }); + box->newFunc("扫描模块", {"deviceId"}, [](int argn, const char **args) { // + IflytopCanbusMaster::ins()->callcmd(atoi(args[0]), kmodule_ping); + }); } }