From ce2e12962e4b5b2f972a07c8ae6cad0d5589d229 Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Mon, 19 May 2025 11:04:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E3=80=81=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E7=BC=96=E8=BE=91=E5=92=8C=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E4=B8=AD=E7=9A=84=E9=A1=B5=E7=A0=81=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=89=A7=E8=A1=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/attributeSelector.h | 5 +++ include/dbBrowser.h | 3 ++ source/attributeSelector.cpp | 67 +++++++++++++++++++++++++++++++++- source/attributeTableModel.cpp | 6 ++- source/dbBrowser.cpp | 24 +++++++++++- ui/attributeSelector.ui | 2 +- 6 files changed, 100 insertions(+), 7 deletions(-) diff --git a/include/attributeSelector.h b/include/attributeSelector.h index 23f3a47..0ba7c08 100644 --- a/include/attributeSelector.h +++ b/include/attributeSelector.h @@ -34,6 +34,11 @@ private slots: void onBtnClicked_refreshData(); void onBtnClicked_submitSelect(); void onBtnClicked_cancleSelect(); + void onBtnClicked_firstPage(); + void onBtnClicked_previousPage(); + void onBtnClicked_nextPage(); + void onBtnClicked_lastPage(); + void onEditingFinished_page(); void onEditingFinished_attributeType(); void onComboBoxTextChanged_model(const QString&); void onComboBoxTextChanged_group(const QString&); diff --git a/include/dbBrowser.h b/include/dbBrowser.h index d264db8..ced2293 100644 --- a/include/dbBrowser.h +++ b/include/dbBrowser.h @@ -26,6 +26,9 @@ public: void closeTab_attribute(ModelAttributeGroup&); void closeAllTab_attribute(); +protected: + bool eventFilter(QObject*, QEvent*) override; + private slots: void onTabCloseRequested(int); void onCurrentTabChanged(int); diff --git a/source/attributeSelector.cpp b/source/attributeSelector.cpp index b994aaf..8375ce4 100644 --- a/source/attributeSelector.cpp +++ b/source/attributeSelector.cpp @@ -27,6 +27,11 @@ AttributeSelector::AttributeSelector(const QString& connection, QWidget *parent) ui->lineEdit_attributeType->setValidator(validator); ui->lineEdit_attributeType->installEventFilter(this); + regExp.setPattern("[0-9]+"); + validator = new QRegularExpressionValidator(regExp, this); + ui->lineEditPage->setValidator(validator); + ui->lineEditPage->installEventFilter(this); + //隐藏一些功能按钮 ui->btnAdd->setVisible(false); ui->btnRemove->setVisible(false); @@ -47,7 +52,12 @@ AttributeSelector::AttributeSelector(const QString& connection, QWidget *parent) connect(ui->btnRefresh, &QPushButton::clicked, this, &AttributeSelector::onBtnClicked_refreshData); connect(ui->btnSave, &QPushButton::clicked, this, &AttributeSelector::onBtnClicked_submitSelect); connect(ui->btnCancle, &QPushButton::clicked, this, &AttributeSelector::onBtnClicked_cancleSelect); + connect(ui->btnFirstPage, &QPushButton::clicked, this, &AttributeSelector::onBtnClicked_firstPage); + connect(ui->btnPreviousPage, &QPushButton::clicked, this, &AttributeSelector::onBtnClicked_previousPage); + connect(ui->btnLastPage, &QPushButton::clicked, this, &AttributeSelector::onBtnClicked_lastPage); + connect(ui->btnNextPage, &QPushButton::clicked, this, &AttributeSelector::onBtnClicked_nextPage); //editingFinished在输入的内容为空时不会触发,所以改为在eventFilter中实现 + //connect(ui->lineEditPage, &QLineEdit::editingFinished, this, &AttributeSelector::onEditingFinished_page); //connect(ui->lineEdit_attributeType, &QLineEdit::editingFinished, this, &AttributeSelector::onEditingFinished_attributeType); iniData(); @@ -152,6 +162,19 @@ bool AttributeSelector::eventFilter(QObject* obj, QEvent* event) else if(event->type() == QEvent::FocusOut) onEditingFinished_attributeType(); } + else if(obj == ui->lineEditPage) + { + if(event->type() == QEvent::KeyPress) + { + QKeyEvent* pKeyEvent = static_cast(event); + if (pKeyEvent->key() == Qt::Key_Enter || pKeyEvent->key() == Qt::Key_Return) + { + onEditingFinished_page(); + } + } + else if(event->type() == QEvent::FocusOut) + onEditingFinished_page(); + } return QDialog::eventFilter(obj, event); } @@ -225,6 +248,46 @@ void AttributeSelector::onBtnClicked_cancleSelect() close(); } +void AttributeSelector::onBtnClicked_firstPage() +{ + if(m_attributeView->model()) + m_attributeView->model()->firstPage(); +} + +void AttributeSelector::onBtnClicked_previousPage() +{ + if(m_attributeView->model()) + m_attributeView->model()->previousPage(); +} + +void AttributeSelector::onBtnClicked_nextPage() +{ + if(m_attributeView->model()) + m_attributeView->model()->nextPage(); +} + +void AttributeSelector::onBtnClicked_lastPage() +{ + if(m_attributeView->model()) + m_attributeView->model()->lastPage(); +} + +void AttributeSelector::onEditingFinished_page() +{ + if(m_attributeView->model()) + { + QString strPage = ui->lineEditPage->text(); + if(strPage.isEmpty()) + ui->lineEditPage->setText(QString::number(m_attributeView->model()->currentPage())); + else + { + bool result = m_attributeView->model()->setCurrentPage(strPage.toInt()); + if(!result) + ui->lineEditPage->setText(QString::number(m_attributeView->model()->currentPage())); + } + } +} + void AttributeSelector::onEditingFinished_attributeType() { if(m_fliterChars_type != ui->lineEdit_attributeType->text()) @@ -238,8 +301,8 @@ void AttributeSelector::onSyncDataStatus(bool hasModifiedData, const PaginationI QString recordInfo = QString::fromWCharArray(L"共 %1 条记录").arg(paginationInfo.totalEntries); ui->recordInfo->setText(recordInfo); - ui->lineEdit->setText(QString::number(paginationInfo.currentPage)); - ui->lineEdit->setEnabled(true); + ui->lineEditPage->setText(QString::number(paginationInfo.currentPage)); + ui->lineEditPage->setEnabled(true); } void AttributeSelector::onShowMessage(MessageDialogType type,const QString& strTitle,const QString& strContent) diff --git a/source/attributeTableModel.cpp b/source/attributeTableModel.cpp index 2b53552..0decbee 100644 --- a/source/attributeTableModel.cpp +++ b/source/attributeTableModel.cpp @@ -466,14 +466,16 @@ void AttributeTableModel::previousPage() if(m_paginationInfo.currentPage == 1) return; - setCurrentPage(m_paginationInfo.currentPage--); + int page = m_paginationInfo.currentPage; + setCurrentPage(--page); } void AttributeTableModel::nextPage() { if(m_paginationInfo.currentPage == totalPages()) return; - setCurrentPage(m_paginationInfo.currentPage++); + int page = m_paginationInfo.currentPage; + setCurrentPage(++page); } void AttributeTableModel::firstPage() { diff --git a/source/dbBrowser.cpp b/source/dbBrowser.cpp index 9599f05..d3e9a46 100644 --- a/source/dbBrowser.cpp +++ b/source/dbBrowser.cpp @@ -4,6 +4,7 @@ #include "attributeView.h" #include #include +#include DatabaseBrowser::DatabaseBrowser(QWidget *parent) : QWidget(parent) @@ -17,6 +18,7 @@ DatabaseBrowser::DatabaseBrowser(QWidget *parent) QRegularExpression regExp("[0-9]+"); QRegularExpressionValidator* validator = new QRegularExpressionValidator(regExp, this); ui->lineEditPage->setValidator(validator); + ui->lineEditPage->installEventFilter(this); connect(ui->tabWidget, &QTabWidget::tabCloseRequested, this, &DatabaseBrowser::onTabCloseRequested); connect(ui->tabWidget, &QTabWidget::currentChanged, this, &DatabaseBrowser::onCurrentTabChanged); @@ -33,7 +35,8 @@ DatabaseBrowser::DatabaseBrowser(QWidget *parent) connect(ui->btnNextPage, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_nextPage); connect(ui->btnLastPage, &QPushButton::clicked, this, &DatabaseBrowser::onBtnClicked_lastPage); - connect(ui->lineEditPage, &QLineEdit::returnPressed, this, &DatabaseBrowser::onEditingFinished_page); + //editingFinished在输入的内容为空时不会触发,所以改为在eventFilter中实现 + connect(ui->lineEditPage, &QLineEdit::editingFinished, this, &DatabaseBrowser::onEditingFinished_page); } DatabaseBrowser::~DatabaseBrowser() @@ -41,6 +44,24 @@ DatabaseBrowser::~DatabaseBrowser() delete ui; } +bool DatabaseBrowser::eventFilter(QObject* obj, QEvent* event) +{ + if(obj == ui->lineEditPage) + { + if(event->type() == QEvent::KeyPress) + { + QKeyEvent* pKeyEvent = static_cast(event); + if (pKeyEvent->key() == Qt::Key_Enter || pKeyEvent->key() == Qt::Key_Return) + { + onEditingFinished_page(); + } + } + else if(event->type() == QEvent::FocusOut) + onEditingFinished_page(); + } + return QWidget::eventFilter(obj, event); +} + void DatabaseBrowser::setMainWindow(MainWindow* window) { m_pMainWindow = window; @@ -353,7 +374,6 @@ void DatabaseBrowser::onEditingFinished_page() if(!result) ui->lineEditPage->setText(QString::number(model->currentPage())); } - } } diff --git a/ui/attributeSelector.ui b/ui/attributeSelector.ui index 72f07d4..21ca380 100644 --- a/ui/attributeSelector.ui +++ b/ui/attributeSelector.ui @@ -515,7 +515,7 @@ QPushButton:pressed 16777215 - + true