元数据页面风格调整

This commit is contained in:
taocong 2026-05-28 13:37:53 +08:00
parent 3e05ecd9d2
commit 5f3a8cc8dd
9 changed files with 290 additions and 207 deletions

View File

@ -2,18 +2,46 @@
#include "src/utils/uf2configreader.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QGroupBox>
#include <QFile>
#include <QCoreApplication>
#include <QTableWidgetItem>
#include <QHeaderView>
#include <QMessageBox>
#include <QInputDialog>
#include <QDialog>
#include <QTextEdit>
#include <QStandardItem>
#include <QStyledItemDelegate>
#include <QPainter>
#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<QBrush>()) {
painter->fillRect(opt.rect, bgColor.value<QBrush>());
}
if (fgColor.canConvert<QBrush>()) {
painter->setPen(fgColor.value<QBrush>().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<QStandardItem*> 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<QTableWidgetItem*> selectedItems = m_funcTable->selectedItems();
if (selectedItems.isEmpty()) {
QModelIndexList selectedIndexes = m_funcTable->selectionModel()->selectedRows();
if (selectedIndexes.isEmpty()) {
QMessageBox::warning(this, "提示", "请先选中要删除的行!");
return;
}
QList<int> 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);
}

View File

@ -2,11 +2,12 @@
#define BATCHCONVERTPAGE_H
#include <QWidget>
#include <QTableWidget>
#include <QProgressBar>
#include <QLabel>
#include <QStandardItemModel>
#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;
};

View File

@ -2,9 +2,10 @@
#define FUNCTIONSEARCHPAGE_H
#include <QWidget>
#include <QTableWidget>
#include <QStandardItemModel>
#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

View File

@ -3,9 +3,9 @@
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QTableWidgetItem>
#include <QHeaderView>
#include <QMessageBox>
#include <QStandardItem>
#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<QStandardItem*> 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);
}
}

View File

@ -2,10 +2,11 @@
#define UF20FUNCTIONSEARCHPAGE_H
#include <QWidget>
#include <QTableWidget>
#include <QStandardItemModel>
#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

View File

@ -3,9 +3,9 @@
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QTableWidgetItem>
#include <QHeaderView>
#include <QMessageBox>
#include <QStandardItem>
#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<QStandardItem*> 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);
}
}

View File

@ -2,10 +2,11 @@
#define UFT3FUNCTIONSEARCHPAGE_H
#include <QWidget>
#include <QTableWidget>
#include <QStandardItemModel>
#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

View File

@ -2,11 +2,13 @@
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QMessageBox>
#include <QSpacerItem>
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(", ")));
}

View File

@ -1,12 +1,15 @@
#ifndef METADATUPDATEPAGE_H
#define METADATUPDATEPAGE_H
#include <QWidget>
#include "ElaCheckBox.h"
#include "ElaScrollPage.h"
#include "ElaPushButton.h"
#include <QGroupBox>
#include "ElaText.h"
#include "ElaProgressBar.h"
#include "ElaCheckBox.h"
#include <QGridLayout>
#include <QMessageBox>
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();
void showUpdateItems();
ElaCheckBox *m_uf20StdField;
ElaCheckBox *m_uf20DataType;
ElaCheckBox *m_uf20ErrorNo;
ElaCheckBox *m_uf20Table;
ElaCheckBox *m_uf20Interface;
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};
ElaCheckBox *m_uft3StdField;
ElaCheckBox *m_uft3DataType;
ElaCheckBox *m_uft3ErrorNo;
ElaCheckBox *m_uft3Interface;
QList<ElaCheckBox*> uft3CheckBoxes;
QList<ElaCheckBox*> uf20CheckBoxes;
};
#endif