diff --git a/src/pages/batchconvert/batchconvertpage.cpp b/src/pages/batchconvert/batchconvertpage.cpp index d4656a5..310cd61 100644 --- a/src/pages/batchconvert/batchconvertpage.cpp +++ b/src/pages/batchconvert/batchconvertpage.cpp @@ -2,18 +2,46 @@ #include "src/utils/uf2configreader.h" #include #include -#include #include #include #include -#include #include #include #include #include #include +#include +#include +#include #include "src/utils/logmanager.h" #include "ElaPushButton.h" +#include "ElaProgressBar.h" +#include "ElaText.h" + +class StatusDelegate : public QStyledItemDelegate +{ +public: + explicit StatusDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) {} + + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override + { + QVariant bgColor = index.data(Qt::BackgroundRole); + QVariant fgColor = index.data(Qt::ForegroundRole); + + QStyleOptionViewItem opt = option; + initStyleOption(&opt, index); + + if (bgColor.canConvert()) { + painter->fillRect(opt.rect, bgColor.value()); + } + + if (fgColor.canConvert()) { + painter->setPen(fgColor.value().color()); + } + + painter->drawText(opt.rect, opt.displayAlignment, opt.text); + } +}; BatchConvertPage::BatchConvertPage(QWidget *parent) : QWidget(parent) @@ -36,9 +64,12 @@ void BatchConvertPage::initUI() QVBoxLayout *funcLayout = new QVBoxLayout(funcBox); funcLayout->setSpacing(10); - m_funcTable = new QTableWidget; - m_funcTable->setColumnCount(3); - m_funcTable->setHorizontalHeaderLabels({"UF20函数名", "是否存在", "操作"}); + m_tableModel = new QStandardItemModel(this); + m_tableModel->setColumnCount(3); + m_tableModel->setHorizontalHeaderLabels({"UF20函数名", "是否存在", "操作"}); + + m_funcTable = new ElaTableView; + m_funcTable->setModel(m_tableModel); m_funcTable->setMinimumHeight(200); m_funcTable->setSelectionBehavior(QAbstractItemView::SelectRows); m_funcTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed); @@ -46,6 +77,7 @@ void BatchConvertPage::initUI() m_funcTable->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Fixed); m_funcTable->horizontalHeader()->setStretchLastSection(false); m_funcTable->setColumnWidth(2, 80); + m_funcTable->setItemDelegateForColumn(1, new StatusDelegate(this)); funcLayout->addWidget(m_funcTable); QHBoxLayout *tableBtnLayout = new QHBoxLayout; @@ -68,30 +100,18 @@ void BatchConvertPage::initUI() QVBoxLayout *progressLayout = new QVBoxLayout(progressBox); progressLayout->setSpacing(10); - m_progressLabel = new QLabel("等待开始..."); - m_progressLabel->setStyleSheet("color: #666;"); - m_progressLabel->setFixedHeight(20); + m_progressLabel = new ElaText("等待开始..."); + m_progressLabel->setStyleSheet("color: #666; font-size: 12px;"); + m_progressLabel->setFixedHeight(40); m_progressLabel->setWordWrap(false); m_progressLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); progressLayout->addWidget(m_progressLabel); - m_progressBar = new QProgressBar; + m_progressBar = new ElaProgressBar; m_progressBar->setRange(0, 100); m_progressBar->setValue(0); m_progressBar->setFixedHeight(25); m_progressBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - m_progressBar->setStyleSheet(R"( - QProgressBar { - border: 1px solid #ddd; - border-radius: 4px; - background-color: #f0f0f0; - text-align: center; - } - QProgressBar::chunk { - background-color: #1abc9c; - border-radius: 4px; - } - )"); progressLayout->addWidget(m_progressBar); layout->addWidget(progressBox); @@ -122,30 +142,37 @@ bool BatchConvertPage::checkFunctionExists(const QString &funcName) void BatchConvertPage::updateTable() { - m_funcTable->setRowCount(m_funcList.size()); + m_tableModel->removeRows(0, m_tableModel->rowCount()); for (int i = 0; i < m_funcList.size(); ++i) { QString funcName = m_funcList[i]; - QTableWidgetItem *nameItem = new QTableWidgetItem(funcName); + QStandardItem *nameItem = new QStandardItem(funcName); nameItem->setFlags(nameItem->flags() & ~Qt::ItemIsEditable); - m_funcTable->setItem(i, 0, nameItem); bool exists = checkFunctionExists(funcName); QString statusText = exists ? "是" : "否"; - QTableWidgetItem *statusItem = new QTableWidgetItem(statusText); + QStandardItem *statusItem = new QStandardItem(statusText); statusItem->setFlags(statusItem->flags() & ~Qt::ItemIsEditable); statusItem->setTextAlignment(Qt::AlignCenter); if (exists) { - statusItem->setBackground(QColor(144, 238, 144)); - statusItem->setForeground(QColor(0, 100, 0)); + statusItem->setData(QBrush(QColor(144, 238, 144)), Qt::BackgroundRole); + statusItem->setData(QBrush(QColor(0, 100, 0)), Qt::ForegroundRole); } else { - statusItem->setBackground(QColor(255, 182, 193)); - statusItem->setForeground(QColor(139, 0, 0)); + statusItem->setData(QBrush(QColor(255, 182, 193)), Qt::BackgroundRole); + statusItem->setData(QBrush(QColor(139, 0, 0)), Qt::ForegroundRole); } - m_funcTable->setItem(i, 1, statusItem); + + QStandardItem *actionItem = new QStandardItem(""); + actionItem->setFlags(actionItem->flags() & ~Qt::ItemIsEditable); + + QList rowItems; + rowItems.append(nameItem); + rowItems.append(statusItem); + rowItems.append(actionItem); + m_tableModel->appendRow(rowItems); QPushButton *editBtn = new QPushButton; editBtn->setIcon(QIcon(":/resources/images/bianji.png")); @@ -155,10 +182,10 @@ void BatchConvertPage::updateTable() connect(editBtn, &QPushButton::clicked, this, [this, i]() { onEditRow(i); }); - m_funcTable->setCellWidget(i, 2, editBtn); + m_funcTable->setIndexWidget(m_tableModel->index(i, 2), editBtn); } - int totalWidth = m_funcTable->width(); + int totalWidth = m_funcTable->viewport()->width(); m_funcTable->setColumnWidth(0, (totalWidth - 80) * 8 / 10); m_funcTable->setColumnWidth(1, (totalWidth - 80) * 2 / 10); m_funcTable->setColumnWidth(2, 80); @@ -280,15 +307,15 @@ void BatchConvertPage::onAddFunction() void BatchConvertPage::onRemoveFunction() { - QList selectedItems = m_funcTable->selectedItems(); - if (selectedItems.isEmpty()) { + QModelIndexList selectedIndexes = m_funcTable->selectionModel()->selectedRows(); + if (selectedIndexes.isEmpty()) { QMessageBox::warning(this, "提示", "请先选中要删除的行!"); return; } QList rowsToRemove; - for (QTableWidgetItem *item : selectedItems) { - int row = item->row(); + for (const QModelIndex &index : selectedIndexes) { + int row = index.row(); if (!rowsToRemove.contains(row)) { rowsToRemove.append(row); } diff --git a/src/pages/batchconvert/batchconvertpage.h b/src/pages/batchconvert/batchconvertpage.h index 68fd23b..90e603a 100644 --- a/src/pages/batchconvert/batchconvertpage.h +++ b/src/pages/batchconvert/batchconvertpage.h @@ -2,11 +2,12 @@ #define BATCHCONVERTPAGE_H #include -#include -#include -#include +#include #include "ElaLineEdit.h" #include "ElaPushButton.h" +#include "ElaTableView.h" +#include "ElaProgressBar.h" +#include "ElaText.h" class BatchConvertPage : public QWidget { @@ -44,10 +45,11 @@ private: void updateTable(); void resizeEvent(QResizeEvent *event) override; - QTableWidget *m_funcTable; + ElaTableView *m_funcTable; + QStandardItemModel *m_tableModel; QStringList m_funcList; - QProgressBar *m_progressBar; - QLabel *m_progressLabel; + ElaProgressBar *m_progressBar; + ElaText *m_progressLabel; ElaPushButton *m_startBtn; }; diff --git a/src/pages/functionsearch/functionsearchpage.h b/src/pages/functionsearch/functionsearchpage.h index 24e9f1f..df3772c 100644 --- a/src/pages/functionsearch/functionsearchpage.h +++ b/src/pages/functionsearch/functionsearchpage.h @@ -2,9 +2,10 @@ #define FUNCTIONSEARCHPAGE_H #include -#include +#include #include "ElaLineEdit.h" #include "ElaPushButton.h" +#include "ElaTableView.h" class FunctionSearchPage : public QWidget { @@ -18,7 +19,8 @@ private: void initUI(); ElaLineEdit *m_searchEdit; - QTableWidget *m_resultTable; + ElaTableView *m_resultTable; + QStandardItemModel *m_tableModel; }; #endif diff --git a/src/pages/functionsearch/uf20functionsearchpage.cpp b/src/pages/functionsearch/uf20functionsearchpage.cpp index a61ba49..893f34f 100644 --- a/src/pages/functionsearch/uf20functionsearchpage.cpp +++ b/src/pages/functionsearch/uf20functionsearchpage.cpp @@ -3,9 +3,9 @@ #include #include #include -#include #include #include +#include #include "ElaComboBox.h" #include "ElaLineEdit.h" #include "ElaPushButton.h" @@ -47,15 +47,18 @@ void UF20FunctionSearchPage::initUI() searchLayout->addStretch(); layout->addLayout(searchLayout); - m_resultTable = new QTableWidget; - m_resultTable->setColumnCount(3); - m_resultTable->setHorizontalHeaderLabels({"功能名称", "英文名", "功能编号"}); + m_tableModel = new QStandardItemModel(this); + m_tableModel->setColumnCount(3); + m_tableModel->setHorizontalHeaderLabels({"功能名称", "英文名", "功能编号"}); + + m_resultTable = new ElaTableView; + m_resultTable->setModel(m_tableModel); m_resultTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); m_resultTable->setMinimumHeight(400); m_resultTable->setSelectionBehavior(QAbstractItemView::SelectRows); m_resultTable->setEditTriggers(QAbstractItemView::NoEditTriggers); m_resultTable->setSelectionMode(QAbstractItemView::SingleSelection); - connect(m_resultTable, &QTableWidget::cellDoubleClicked, this, &UF20FunctionSearchPage::onTableDoubleClicked); + connect(m_resultTable, &QTableView::doubleClicked, this, &UF20FunctionSearchPage::onTableDoubleClicked); layout->addWidget(m_resultTable); QHBoxLayout *tipLayout = new QHBoxLayout; @@ -70,7 +73,7 @@ void UF20FunctionSearchPage::onSearch() { QString keyword = m_searchEdit->text().trimmed(); - m_resultTable->setRowCount(0); + m_tableModel->removeRows(0, m_tableModel->rowCount()); if (keyword.isEmpty()) { QMessageBox::information(this, "提示", "请输入查询内容"); @@ -85,31 +88,29 @@ void UF20FunctionSearchPage::onSearch() return; } - int row = 0; for (const FunctionInfo& info : results) { - m_resultTable->insertRow(row); + QList rowItems; - QTableWidgetItem *cnameItem = new QTableWidgetItem(info.cname); + QStandardItem *cnameItem = new QStandardItem(info.cname); cnameItem->setFlags(cnameItem->flags() & ~Qt::ItemIsEditable); - m_resultTable->setItem(row, 0, cnameItem); + rowItems.append(cnameItem); - QTableWidgetItem *eNameItem = new QTableWidgetItem(info.eName); + QStandardItem *eNameItem = new QStandardItem(info.eName); eNameItem->setFlags(eNameItem->flags() & ~Qt::ItemIsEditable); - m_resultTable->setItem(row, 1, eNameItem); + rowItems.append(eNameItem); - QTableWidgetItem *funcNoItem = new QTableWidgetItem(info.functionNo); + QStandardItem *funcNoItem = new QStandardItem(info.functionNo); funcNoItem->setFlags(funcNoItem->flags() & ~Qt::ItemIsEditable); - m_resultTable->setItem(row, 2, funcNoItem); + rowItems.append(funcNoItem); - row++; + m_tableModel->appendRow(rowItems); } } -void UF20FunctionSearchPage::onTableDoubleClicked(int row, int column) +void UF20FunctionSearchPage::onTableDoubleClicked(const QModelIndex &index) { - QTableWidgetItem *item = m_resultTable->item(row, 0); - if (item) { - QString funcName = item->text(); + if (index.isValid()) { + QString funcName = m_tableModel->data(m_tableModel->index(index.row(), 0)).toString(); emit addFunctionToConvert(funcName); } } diff --git a/src/pages/functionsearch/uf20functionsearchpage.h b/src/pages/functionsearch/uf20functionsearchpage.h index ca8de33..e635de9 100644 --- a/src/pages/functionsearch/uf20functionsearchpage.h +++ b/src/pages/functionsearch/uf20functionsearchpage.h @@ -2,10 +2,11 @@ #define UF20FUNCTIONSEARCHPAGE_H #include -#include +#include #include "ElaComboBox.h" #include "ElaLineEdit.h" #include "ElaPushButton.h" +#include "ElaTableView.h" class UF20FunctionSearchPage : public QWidget { @@ -20,14 +21,15 @@ signals: private slots: void onSearch(); - void onTableDoubleClicked(int row, int column); + void onTableDoubleClicked(const QModelIndex &index); private: void initUI(); ElaComboBox *m_searchComboBox; ElaLineEdit *m_searchEdit; - QTableWidget *m_resultTable; + ElaTableView *m_resultTable; + QStandardItemModel *m_tableModel; }; #endif diff --git a/src/pages/functionsearch/uft3functionsearchpage.cpp b/src/pages/functionsearch/uft3functionsearchpage.cpp index c457c7e..8b3c7de 100644 --- a/src/pages/functionsearch/uft3functionsearchpage.cpp +++ b/src/pages/functionsearch/uft3functionsearchpage.cpp @@ -3,9 +3,9 @@ #include #include #include -#include #include #include +#include #include "ElaComboBox.h" #include "ElaLineEdit.h" #include "ElaPushButton.h" @@ -46,9 +46,12 @@ void UFT3FunctionSearchPage::initUI() searchLayout->addStretch(); layout->addLayout(searchLayout); - m_resultTable = new QTableWidget; - m_resultTable->setColumnCount(3); - m_resultTable->setHorizontalHeaderLabels({"英文名", "功能编号", "功能名称"}); + m_tableModel = new QStandardItemModel(this); + m_tableModel->setColumnCount(3); + m_tableModel->setHorizontalHeaderLabels({"英文名", "功能编号", "功能名称"}); + + m_resultTable = new ElaTableView; + m_resultTable->setModel(m_tableModel); m_resultTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); m_resultTable->setMinimumHeight(400); m_resultTable->setSelectionBehavior(QAbstractItemView::SelectRows); @@ -60,7 +63,7 @@ void UFT3FunctionSearchPage::onSearch() { QString keyword = m_searchEdit->text().trimmed(); - m_resultTable->setRowCount(0); + m_tableModel->removeRows(0, m_tableModel->rowCount()); if (keyword.isEmpty()) { QMessageBox::information(this, "提示", "请输入查询内容"); @@ -75,22 +78,21 @@ void UFT3FunctionSearchPage::onSearch() return; } - int row = 0; for (const FunctionInfo& info : results) { - m_resultTable->insertRow(row); + QList rowItems; - QTableWidgetItem *cnameItem = new QTableWidgetItem(info.cname); + QStandardItem *cnameItem = new QStandardItem(info.cname); cnameItem->setFlags(cnameItem->flags() & ~Qt::ItemIsEditable); - m_resultTable->setItem(row, 0, cnameItem); + rowItems.append(cnameItem); - QTableWidgetItem *eNameItem = new QTableWidgetItem(info.eName); + QStandardItem *eNameItem = new QStandardItem(info.eName); eNameItem->setFlags(eNameItem->flags() & ~Qt::ItemIsEditable); - m_resultTable->setItem(row, 1, eNameItem); + rowItems.append(eNameItem); - QTableWidgetItem *funcNoItem = new QTableWidgetItem(info.functionNo); + QStandardItem *funcNoItem = new QStandardItem(info.functionNo); funcNoItem->setFlags(funcNoItem->flags() & ~Qt::ItemIsEditable); - m_resultTable->setItem(row, 2, funcNoItem); + rowItems.append(funcNoItem); - row++; + m_tableModel->appendRow(rowItems); } } diff --git a/src/pages/functionsearch/uft3functionsearchpage.h b/src/pages/functionsearch/uft3functionsearchpage.h index 2a14d02..3513e30 100644 --- a/src/pages/functionsearch/uft3functionsearchpage.h +++ b/src/pages/functionsearch/uft3functionsearchpage.h @@ -2,10 +2,11 @@ #define UFT3FUNCTIONSEARCHPAGE_H #include -#include +#include #include "ElaComboBox.h" #include "ElaLineEdit.h" #include "ElaPushButton.h" +#include "ElaTableView.h" class UFT3FunctionSearchPage : public QWidget { @@ -23,7 +24,8 @@ private: ElaComboBox *m_searchComboBox; ElaLineEdit *m_searchEdit; - QTableWidget *m_resultTable; + ElaTableView *m_resultTable; + QStandardItemModel *m_tableModel; }; #endif diff --git a/src/pages/metadatupdate/metadatupdatepage.cpp b/src/pages/metadatupdate/metadatupdatepage.cpp index 17742b0..53f8af6 100644 --- a/src/pages/metadatupdate/metadatupdatepage.cpp +++ b/src/pages/metadatupdate/metadatupdatepage.cpp @@ -2,11 +2,13 @@ #include #include #include -#include #include +#include + +const int UPDATE_ITEM_SHOW_COLUMN_COUNT = 3; MetadataUpdatePage::MetadataUpdatePage(QWidget *parent) - : QWidget(parent) + : ElaScrollPage(parent) { initUI(); } @@ -17,135 +19,169 @@ MetadataUpdatePage::~MetadataUpdatePage() void MetadataUpdatePage::initUI() { - QHBoxLayout *mainLayout = new QHBoxLayout(this); - mainLayout->setContentsMargins(50, 50, 50, 50); - mainLayout->setSpacing(60); + resize(600, 500); + setTitleVisible(false); + this->setContentsMargins(0, 0, 0, 0); + this->setWindowTitle("元数据更新"); - // ========================================== - // UFT3更新范围 - // ========================================== - QVBoxLayout *uft3SectionLayout = new QVBoxLayout; - uft3SectionLayout->setSpacing(15); + auto* centralWidget = new QWidget(this); + auto* centerLayout = new QVBoxLayout(centralWidget); - QGroupBox *uft3Group = new QGroupBox("UFT3更新范围"); - QGridLayout *uft3Grid = new QGridLayout(uft3Group); - uft3Grid->setSpacing(15); - uft3Grid->setContentsMargins(15, 15, 15, 15); + centerLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding)); - m_uft3StdField = new ElaCheckBox("标准字段"); - m_uft3StdField->setChecked(true); - uft3Grid->addWidget(m_uft3StdField, 0, 0); + auto* contentWidget = new QWidget(this); + auto* gridLayout = new QGridLayout(contentWidget); - m_uft3DataType = new ElaCheckBox("数据类型"); - m_uft3DataType->setChecked(true); - uft3Grid->addWidget(m_uft3DataType, 0, 1); + gridLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum), 0, 0, 2, 1); - m_uft3ErrorNo = new ElaCheckBox("标准错误号"); - m_uft3ErrorNo->setChecked(true); - uft3Grid->addWidget(m_uft3ErrorNo, 1, 0); + auto* uft3GroupBox = new QWidget(contentWidget); + uft3GroupBox->setObjectName("CardWidget"); + uft3GroupBox->setStyleSheet(R"( + #CardWidget { + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + } + )"); + _updateGridLayout = new QGridLayout(uft3GroupBox); + _updateGridLayout->setContentsMargins(12, 10, 12, 10); + _updateGridLayout->setSpacing(6); - m_uft3Interface = new ElaCheckBox("接口数据"); - m_uft3Interface->setChecked(true); - uft3Grid->addWidget(m_uft3Interface, 1, 1); + auto* uft3Title = new ElaText("UFT30更新范围"); + uft3Title->setStyleSheet("font-size: 14px; font-weight: bold;"); + uft3Title->setAlignment(Qt::AlignCenter); + _updateGridLayout->addWidget(uft3Title, 0, 0, 1, UPDATE_ITEM_SHOW_COLUMN_COUNT); + gridLayout->addWidget(uft3GroupBox, 0, 1, 1, 4); - uft3SectionLayout->addWidget(uft3Group); + _uft3AllBtn = new ElaPushButton("全选", contentWidget); + connect(_uft3AllBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUFT3SelectAll); + gridLayout->addWidget(_uft3AllBtn, 1, 2, 1, 1); - QHBoxLayout *uft3BtnLayout = new QHBoxLayout; - uft3BtnLayout->setSpacing(15); - ElaPushButton *uft3SelectAllBtn = new ElaPushButton("全选"); - connect(uft3SelectAllBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUFT3SelectAll); - ElaPushButton *uft3SelectNoneBtn = new ElaPushButton("全不选"); - connect(uft3SelectNoneBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUFT3SelectNone); - ElaPushButton *uft3UpdateBtn = new ElaPushButton("更新UFT3"); - connect(uft3UpdateBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUpdateUFT3); + _uft3CancelBtn = new ElaPushButton("全不选", contentWidget); + connect(_uft3CancelBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUFT3SelectNone); + gridLayout->addWidget(_uft3CancelBtn, 1, 3, 1, 1); - uft3BtnLayout->addStretch(); - uft3BtnLayout->addWidget(uft3SelectAllBtn); - uft3BtnLayout->addWidget(uft3SelectNoneBtn); - uft3BtnLayout->addWidget(uft3UpdateBtn); - uft3BtnLayout->addStretch(); + _uft3UpdateBtn = new ElaPushButton("更新UFT30", contentWidget); + connect(_uft3UpdateBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUpdateUFT3); + gridLayout->addWidget(_uft3UpdateBtn, 1, 4, 1, 1); - uft3SectionLayout->addLayout(uft3BtnLayout); - mainLayout->addLayout(uft3SectionLayout); + gridLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum), 0, 5, 2, 1); - // ========================================== - // UF20更新范围 - // ========================================== - QVBoxLayout *uf20SectionLayout = new QVBoxLayout; - uf20SectionLayout->setSpacing(15); + auto* uf20GroupBox = new QWidget(contentWidget); + uf20GroupBox->setObjectName("CardWidget"); + uf20GroupBox->setStyleSheet(R"( + #CardWidget { + background-color: white; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + } + )"); + _updateUf2GridLayout = new QGridLayout(uf20GroupBox); + _updateUf2GridLayout->setContentsMargins(12, 10, 12, 10); + _updateUf2GridLayout->setSpacing(6); - QGroupBox *uf20Group = new QGroupBox("UF20更新范围"); - QGridLayout *uf20Grid = new QGridLayout(uf20Group); - uf20Grid->setSpacing(15); - uf20Grid->setContentsMargins(15, 15, 15, 15); + auto* uf20Title = new ElaText("UF20更新范围"); + uf20Title->setStyleSheet("font-size: 14px; font-weight: bold;"); + uf20Title->setAlignment(Qt::AlignCenter); + _updateUf2GridLayout->addWidget(uf20Title, 0, 0, 1, UPDATE_ITEM_SHOW_COLUMN_COUNT); + gridLayout->addWidget(uf20GroupBox, 0, 6, 1, 4); - m_uf20StdField = new ElaCheckBox("标准字段"); - m_uf20StdField->setChecked(true); - uf20Grid->addWidget(m_uf20StdField, 0, 0); + _uf2AllBtn = new ElaPushButton("全选", contentWidget); + connect(_uf2AllBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUF20SelectAll); + gridLayout->addWidget(_uf2AllBtn, 1, 7, 1, 1); - m_uf20DataType = new ElaCheckBox("数据类型"); - m_uf20DataType->setChecked(true); - uf20Grid->addWidget(m_uf20DataType, 0, 1); + _uf2CancelBtn = new ElaPushButton("全不选", contentWidget); + connect(_uf2CancelBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUF20SelectNone); + gridLayout->addWidget(_uf2CancelBtn, 1, 8, 1, 1); - m_uf20ErrorNo = new ElaCheckBox("标准错误号"); - m_uf20ErrorNo->setChecked(true); - uf20Grid->addWidget(m_uf20ErrorNo, 1, 0); + _uf2UpdateBtn = new ElaPushButton("更新UF20", contentWidget); + connect(_uf2UpdateBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUpdateUF20); + gridLayout->addWidget(_uf2UpdateBtn, 1, 9, 1, 1); - m_uf20Table = new ElaCheckBox("表结构"); - m_uf20Table->setChecked(true); - uf20Grid->addWidget(m_uf20Table, 1, 1); + gridLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum), 0, 10, 2, 1); - m_uf20Interface = new ElaCheckBox("接口数据"); - m_uf20Interface->setChecked(true); - uf20Grid->addWidget(m_uf20Interface, 2, 0); + centerLayout->addWidget(contentWidget); - uf20SectionLayout->addWidget(uf20Group); + centerLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding)); - QHBoxLayout *uf20BtnLayout = new QHBoxLayout; - uf20BtnLayout->setSpacing(15); - ElaPushButton *uf20SelectAllBtn = new ElaPushButton("全选"); - connect(uf20SelectAllBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUF20SelectAll); - ElaPushButton *uf20SelectNoneBtn = new ElaPushButton("全不选"); - connect(uf20SelectNoneBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUF20SelectNone); - ElaPushButton *uf20UpdateBtn = new ElaPushButton("更新UF20"); - connect(uf20UpdateBtn, &QPushButton::clicked, this, &MetadataUpdatePage::onUpdateUF20); + _processLabel = new ElaText(this); + centerLayout->addWidget(_processLabel); - uf20BtnLayout->addStretch(); - uf20BtnLayout->addWidget(uf20SelectAllBtn); - uf20BtnLayout->addWidget(uf20SelectNoneBtn); - uf20BtnLayout->addWidget(uf20UpdateBtn); - uf20BtnLayout->addStretch(); + _progressBar = new ElaProgressBar(this); + _progressBar->setValue(0); + centerLayout->addWidget(_progressBar); - uf20SectionLayout->addLayout(uf20BtnLayout); - mainLayout->addLayout(uf20SectionLayout); + centerLayout->setContentsMargins(10, 10, 10, 10); + addCentralWidget(centralWidget, true, false, 0); +} + +void MetadataUpdatePage::showEvent(QShowEvent* event) +{ + ElaScrollPage::showEvent(event); + static bool firstShow = true; + if (firstShow) + { + firstShow = false; + showUpdateItems(); + } +} + +void MetadataUpdatePage::showUpdateItems() +{ + QStringList uft3Items = {"标准字段", "数据类型", "标准错误号", + "接口数据"}; + + QStringList uf20Items = {"标准字段", "数据类型", "标准错误号", + "接口数据"}; + + for (int i = 0; i < uft3Items.size(); ++i) { + auto* cbx = new ElaCheckBox(uft3Items[i]); + cbx->setCheckState(Qt::Checked); + uft3CheckBoxes.append(cbx); + _updateGridLayout->addWidget(cbx, i / UPDATE_ITEM_SHOW_COLUMN_COUNT + 1, i % UPDATE_ITEM_SHOW_COLUMN_COUNT); + } + + for (int i = 0; i < uf20Items.size(); ++i) { + auto* cbx = new ElaCheckBox(uf20Items[i]); + cbx->setCheckState(Qt::Checked); + uf20CheckBoxes.append(cbx); + _updateUf2GridLayout->addWidget(cbx, i / UPDATE_ITEM_SHOW_COLUMN_COUNT + 1, i % UPDATE_ITEM_SHOW_COLUMN_COUNT); + } + + int uft3Count = uft3Items.size(); + int uf20Count = uf20Items.size(); + while (uft3Count < uf20Count) { + _updateGridLayout->addWidget(new QWidget(this), uft3Count / UPDATE_ITEM_SHOW_COLUMN_COUNT + 1, uft3Count % UPDATE_ITEM_SHOW_COLUMN_COUNT); + ++uft3Count; + } + while (uf20Count < uft3Count) { + _updateUf2GridLayout->addWidget(new QWidget(this), uf20Count / UPDATE_ITEM_SHOW_COLUMN_COUNT + 1, uf20Count % UPDATE_ITEM_SHOW_COLUMN_COUNT); + ++uf20Count; + } } void MetadataUpdatePage::onUF20SelectAll() { - m_uf20StdField->setChecked(true); - m_uf20DataType->setChecked(true); - m_uf20ErrorNo->setChecked(true); - m_uf20Table->setChecked(true); - m_uf20Interface->setChecked(true); + for (auto* cbx : uf20CheckBoxes) { + cbx->setChecked(true); + } } void MetadataUpdatePage::onUF20SelectNone() { - m_uf20StdField->setChecked(false); - m_uf20DataType->setChecked(false); - m_uf20ErrorNo->setChecked(false); - m_uf20Table->setChecked(false); - m_uf20Interface->setChecked(false); + for (auto* cbx : uf20CheckBoxes) { + cbx->setChecked(false); + } } void MetadataUpdatePage::onUpdateUF20() { QStringList selectedItems; - if (m_uf20StdField->isChecked()) selectedItems << "标准字段"; - if (m_uf20DataType->isChecked()) selectedItems << "数据类型"; - if (m_uf20ErrorNo->isChecked()) selectedItems << "标准错误号"; - if (m_uf20Table->isChecked()) selectedItems << "表结构"; - if (m_uf20Interface->isChecked()) selectedItems << "接口数据"; + for (auto* cbx : uf20CheckBoxes) { + if (cbx->isChecked()) { + selectedItems << cbx->text(); + } + } if (selectedItems.isEmpty()) { QMessageBox::warning(this, "提示", "请选择至少一项更新内容"); @@ -157,32 +193,31 @@ void MetadataUpdatePage::onUpdateUF20() void MetadataUpdatePage::onUFT3SelectAll() { - m_uft3StdField->setChecked(true); - m_uft3DataType->setChecked(true); - m_uft3ErrorNo->setChecked(true); - m_uft3Interface->setChecked(true); + for (auto* cbx : uft3CheckBoxes) { + cbx->setChecked(true); + } } void MetadataUpdatePage::onUFT3SelectNone() { - m_uft3StdField->setChecked(false); - m_uft3DataType->setChecked(false); - m_uft3ErrorNo->setChecked(false); - m_uft3Interface->setChecked(false); + for (auto* cbx : uft3CheckBoxes) { + cbx->setChecked(false); + } } void MetadataUpdatePage::onUpdateUFT3() { QStringList selectedItems; - if (m_uft3StdField->isChecked()) selectedItems << "标准字段"; - if (m_uft3DataType->isChecked()) selectedItems << "数据类型"; - if (m_uft3ErrorNo->isChecked()) selectedItems << "标准错误号"; - if (m_uft3Interface->isChecked()) selectedItems << "接口数据"; + for (auto* cbx : uft3CheckBoxes) { + if (cbx->isChecked()) { + selectedItems << cbx->text(); + } + } if (selectedItems.isEmpty()) { QMessageBox::warning(this, "提示", "请选择至少一项更新内容"); return; } - QMessageBox::information(this, "提示", QString("UFT3更新功能开发中,已选择: %1").arg(selectedItems.join(", "))); + QMessageBox::information(this, "提示", QString("UFT30更新功能开发中,已选择: %1").arg(selectedItems.join(", "))); } diff --git a/src/pages/metadatupdate/metadatupdatepage.h b/src/pages/metadatupdate/metadatupdatepage.h index c9e93e6..04bae3e 100644 --- a/src/pages/metadatupdate/metadatupdatepage.h +++ b/src/pages/metadatupdate/metadatupdatepage.h @@ -1,12 +1,15 @@ #ifndef METADATUPDATEPAGE_H #define METADATUPDATEPAGE_H -#include -#include "ElaCheckBox.h" +#include "ElaScrollPage.h" #include "ElaPushButton.h" -#include +#include "ElaText.h" +#include "ElaProgressBar.h" +#include "ElaCheckBox.h" +#include +#include -class MetadataUpdatePage : public QWidget +class MetadataUpdatePage : public ElaScrollPage { Q_OBJECT @@ -14,6 +17,9 @@ public: explicit MetadataUpdatePage(QWidget *parent = nullptr); ~MetadataUpdatePage(); +protected: + void showEvent(QShowEvent* event) override; + private slots: void onUF20SelectAll(); void onUF20SelectNone(); @@ -24,17 +30,21 @@ private slots: private: void initUI(); - - ElaCheckBox *m_uf20StdField; - ElaCheckBox *m_uf20DataType; - ElaCheckBox *m_uf20ErrorNo; - ElaCheckBox *m_uf20Table; - ElaCheckBox *m_uf20Interface; - - ElaCheckBox *m_uft3StdField; - ElaCheckBox *m_uft3DataType; - ElaCheckBox *m_uft3ErrorNo; - ElaCheckBox *m_uft3Interface; + void showUpdateItems(); + + QGridLayout* _updateGridLayout{nullptr}; + QGridLayout* _updateUf2GridLayout{nullptr}; + ElaPushButton* _uf2UpdateBtn{nullptr}; + ElaPushButton* _uf2CancelBtn{nullptr}; + ElaPushButton* _uft3AllBtn{nullptr}; + ElaPushButton* _uft3CancelBtn{nullptr}; + ElaPushButton* _uf2AllBtn{nullptr}; + ElaPushButton* _uft3UpdateBtn{nullptr}; + ElaText* _processLabel{nullptr}; + ElaProgressBar* _progressBar{nullptr}; + + QList uft3CheckBoxes; + QList uf20CheckBoxes; }; #endif \ No newline at end of file