修复自定义属性编辑框通过‘esc’键关闭后,属性table会丢失焦点问题

This commit is contained in:
duanshengchao 2025-05-09 14:54:20 +08:00
parent 3749f17512
commit d791041e59
7 changed files with 31 additions and 17 deletions

View File

@ -45,6 +45,7 @@ set(H_HEADER_FILES
include/customBorderContainer.h include/customBorderContainer.h
include/groupSelectionDialog.h include/groupSelectionDialog.h
include/dataSyncManager.h include/dataSyncManager.h
include/importExportManager.h
) )
set(CPP_SOURCE_FILES set(CPP_SOURCE_FILES
@ -76,6 +77,7 @@ set(CPP_SOURCE_FILES
source/customBorderContainer.cpp source/customBorderContainer.cpp
source/groupSelectionDialog.cpp source/groupSelectionDialog.cpp
source/dataSyncManager.cpp source/dataSyncManager.cpp
source/importExportManager.cpp
) )
set(UI_FILES set(UI_FILES

View File

@ -27,9 +27,11 @@ public:
signals: signals:
void confirm(); void confirm();
void cancle(); void cancle();
void closeWidget();
protected: protected:
//bool eventFilter(QObject*, QEvent*) override; bool eventFilter(QObject*, QEvent*) override;
//void closeEvent(QCloseEvent*) override;
private slots: private slots:
void onTextChanged(); void onTextChanged();

View File

View File

@ -23,6 +23,8 @@ TextEditWidget::TextEditWidget(QWidget* parent)
connect(ui->plainTextEdit, &QPlainTextEdit::textChanged, this, &TextEditWidget::onTextChanged); connect(ui->plainTextEdit, &QPlainTextEdit::textChanged, this, &TextEditWidget::onTextChanged);
connect(ui->btnConfirm, &QPushButton::clicked, this, &TextEditWidget::onBtnClicked_confirm); connect(ui->btnConfirm, &QPushButton::clicked, this, &TextEditWidget::onBtnClicked_confirm);
connect(ui->btnCancle, &QPushButton::clicked, this, &TextEditWidget::onBtnClicked_cancle); connect(ui->btnCancle, &QPushButton::clicked, this, &TextEditWidget::onBtnClicked_cancle);
ui->plainTextEdit->installEventFilter(this);
} }
TextEditWidget::~TextEditWidget() TextEditWidget::~TextEditWidget()
@ -30,19 +32,19 @@ TextEditWidget::~TextEditWidget()
delete ui; delete ui;
} }
// bool TextEditWidget::eventFilter(QObject* obj, QEvent* event) bool TextEditWidget::eventFilter(QObject* obj, QEvent* event)
// { {
// if (event->type() == QEvent::KeyPress) if (/*obj == this && */event->type() == QEvent::KeyPress)
// { {
// QKeyEvent* pKeyEvent = static_cast<QKeyEvent*>(event); QKeyEvent* pKeyEvent = static_cast<QKeyEvent*>(event);
// if (pKeyEvent->key() == Qt::Key_Tab) if (pKeyEvent->key() == Qt::Key_Escape)
// { {
// qDebug() << "Key_Tab"; emit closeWidget();
// return true; //return true;
// } }
// } }
// return QWidget::eventFilter(obj, event); return QWidget::eventFilter(obj, event);
// } }
QString TextEditWidget::editText() QString TextEditWidget::editText()
{ {
@ -207,6 +209,10 @@ QWidget* AttributeTableDelegate::createEditor(QWidget *parent, const QStyleOptio
if(m_tableView) if(m_tableView)
m_tableView->setFocus(); m_tableView->setFocus();
}); });
connect(textEditor, &TextEditWidget::closeWidget, this, [=]{
if(m_tableView)
m_tableView->setFocus();
});
//延迟获取焦点,防止可能因渲染未完成失效 //延迟获取焦点,防止可能因渲染未完成失效
QTimer::singleShot(10, this, [textEditor]() { QTimer::singleShot(10, this, [textEditor]() {
textEditor->setFocusToTextEdit(); textEditor->setFocusToTextEdit();

View File

View File

@ -26,7 +26,7 @@ MaskManager::MaskManager(QWidget* mainWindow)
m_maskLayer = new MaskLayer(m_mainWindow); m_maskLayer = new MaskLayer(m_mainWindow);
// m_maskLayer->setStyleSheet("background:rgba(112,128,144,180);"); // m_maskLayer->setStyleSheet("background:rgba(112,128,144,180);");
// m_maskLayer->hide(); // m_maskLayer->hide();
m_mainWindow->installEventFilter(this); //在Qt中时间过滤会按照install的顺序反向执行过程中对于同一类型事件任何一个过滤器返回true表示事件被处理后续过滤器和事件函数不会再被调用 m_mainWindow->installEventFilter(this); //在Qt中事件过滤会按照install的顺序反向执行过程中对于同一类型事件任何一个过滤器返回true表示事件被处理后续过滤器和事件函数不会再被调用
} }
bool MaskManager::eventFilter(QObject* obj, QEvent* event) bool MaskManager::eventFilter(QObject* obj, QEvent* event)

View File

@ -581,8 +581,12 @@ bool SqlQueryExecutor::removeAttributeGroup(const QString& connectionName, int m
int SqlQueryExecutor::getAttributeCount(const QString& connectionName, int modelID, int groupID) int SqlQueryExecutor::getAttributeCount(const QString& connectionName, int modelID, int groupID)
{ {
int count = 0; int count = 0;
//利用短路机制当attribute_group_id!=-1时括号整体为false需要进行内部条件判断=-1时整体为true忽略整体也就忽略了attribute_group_id的条件判断 QString strSQL = "";
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); 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 try
{ {
QSqlQuery query = executeSQL(connectionName, strSQL); QSqlQuery query = executeSQL(connectionName, strSQL);