From d791041e59a6f3e5183b03c3749472a81b8c06e1 Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Fri, 9 May 2025 14:54:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E7=BC=96=E8=BE=91=E6=A1=86=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E2=80=98esc=E2=80=99=E9=94=AE=E5=85=B3=E9=97=AD=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E5=B1=9E=E6=80=A7table=E4=BC=9A=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E7=84=A6=E7=82=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 ++ include/attributeTableDelegate.h | 4 +++- include/importExportManager.h | 0 source/attributeTableDelegate.cpp | 32 ++++++++++++++++++------------- source/importExportManager.cpp | 0 source/maskManager.cpp | 2 +- source/sqlQueryExecutor.cpp | 8 ++++++-- 7 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 include/importExportManager.h create mode 100644 source/importExportManager.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index fe1e990..0808303 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,7 @@ set(H_HEADER_FILES include/customBorderContainer.h include/groupSelectionDialog.h include/dataSyncManager.h + include/importExportManager.h ) set(CPP_SOURCE_FILES @@ -76,6 +77,7 @@ set(CPP_SOURCE_FILES source/customBorderContainer.cpp source/groupSelectionDialog.cpp source/dataSyncManager.cpp + source/importExportManager.cpp ) set(UI_FILES diff --git a/include/attributeTableDelegate.h b/include/attributeTableDelegate.h index b54b94b..6d0ca4c 100644 --- a/include/attributeTableDelegate.h +++ b/include/attributeTableDelegate.h @@ -27,9 +27,11 @@ public: signals: void confirm(); void cancle(); + void closeWidget(); protected: - //bool eventFilter(QObject*, QEvent*) override; + bool eventFilter(QObject*, QEvent*) override; + //void closeEvent(QCloseEvent*) override; private slots: void onTextChanged(); diff --git a/include/importExportManager.h b/include/importExportManager.h new file mode 100644 index 0000000..e69de29 diff --git a/source/attributeTableDelegate.cpp b/source/attributeTableDelegate.cpp index 8097091..22b0b10 100644 --- a/source/attributeTableDelegate.cpp +++ b/source/attributeTableDelegate.cpp @@ -23,6 +23,8 @@ TextEditWidget::TextEditWidget(QWidget* parent) connect(ui->plainTextEdit, &QPlainTextEdit::textChanged, this, &TextEditWidget::onTextChanged); connect(ui->btnConfirm, &QPushButton::clicked, this, &TextEditWidget::onBtnClicked_confirm); connect(ui->btnCancle, &QPushButton::clicked, this, &TextEditWidget::onBtnClicked_cancle); + + ui->plainTextEdit->installEventFilter(this); } TextEditWidget::~TextEditWidget() @@ -30,19 +32,19 @@ TextEditWidget::~TextEditWidget() delete ui; } -// bool TextEditWidget::eventFilter(QObject* obj, QEvent* event) -// { -// if (event->type() == QEvent::KeyPress) -// { -// QKeyEvent* pKeyEvent = static_cast(event); -// if (pKeyEvent->key() == Qt::Key_Tab) -// { -// qDebug() << "Key_Tab"; -// return true; -// } -// } -// return QWidget::eventFilter(obj, event); -// } +bool TextEditWidget::eventFilter(QObject* obj, QEvent* event) +{ + if (/*obj == this && */event->type() == QEvent::KeyPress) + { + QKeyEvent* pKeyEvent = static_cast(event); + if (pKeyEvent->key() == Qt::Key_Escape) + { + emit closeWidget(); + //return true; + } + } + return QWidget::eventFilter(obj, event); +} QString TextEditWidget::editText() { @@ -207,6 +209,10 @@ QWidget* AttributeTableDelegate::createEditor(QWidget *parent, const QStyleOptio if(m_tableView) m_tableView->setFocus(); }); + connect(textEditor, &TextEditWidget::closeWidget, this, [=]{ + if(m_tableView) + m_tableView->setFocus(); + }); //延迟获取焦点,防止可能因渲染未完成失效 QTimer::singleShot(10, this, [textEditor]() { textEditor->setFocusToTextEdit(); diff --git a/source/importExportManager.cpp b/source/importExportManager.cpp new file mode 100644 index 0000000..e69de29 diff --git a/source/maskManager.cpp b/source/maskManager.cpp index 2e4f052..d2d8320 100644 --- a/source/maskManager.cpp +++ b/source/maskManager.cpp @@ -26,7 +26,7 @@ MaskManager::MaskManager(QWidget* mainWindow) m_maskLayer = new MaskLayer(m_mainWindow); // m_maskLayer->setStyleSheet("background:rgba(112,128,144,180);"); // m_maskLayer->hide(); - m_mainWindow->installEventFilter(this); //在Qt中,时间过滤会按照install的顺序反向执行,过程中,对于同一类型事件,任何一个过滤器返回true,表示事件被处理,后续过滤器和事件函数不会再被调用 + m_mainWindow->installEventFilter(this); //在Qt中,事件过滤会按照install的顺序反向执行,过程中,对于同一类型事件,任何一个过滤器返回true,表示事件被处理,后续过滤器和事件函数不会再被调用 } bool MaskManager::eventFilter(QObject* obj, QEvent* event) diff --git a/source/sqlQueryExecutor.cpp b/source/sqlQueryExecutor.cpp index f374145..9389499 100644 --- a/source/sqlQueryExecutor.cpp +++ b/source/sqlQueryExecutor.cpp @@ -581,8 +581,12 @@ bool SqlQueryExecutor::removeAttributeGroup(const QString& connectionName, int m int SqlQueryExecutor::getAttributeCount(const QString& connectionName, int modelID, int groupID) { int count = 0; - //利用短路机制,当attribute_group_id!=-1时,括号整体为false,需要进行内部条件判断,=-1时,整体为true,忽略整体,也就忽略了attribute_group_id的条件判断 - QString strSQL = QString("SELECT COUNT(*) FROM basic.model_attribute WHERE model_type_id = %1 AND (attribute_group_id = %2 OR %2 = -1)").arg(modelID).arg(groupID); + QString strSQL = ""; + bool isPublicGroup = isPublicAttributeGroup(connectionName, groupID); + if(isPublicGroup) + strSQL = QString("SELECT COUNT(*) FROM basic.model_attribute_public WHERE attribute_group_id = %1").arg(groupID); + else + strSQL = QString("SELECT COUNT(*) FROM basic.model_attribute WHERE model_type_id = %1 AND attribute_group_id = %2").arg(modelID).arg(groupID); try { QSqlQuery query = executeSQL(connectionName, strSQL);