优化、完善遮罩逻辑
This commit is contained in:
parent
3d4fa337ca
commit
3916dc5515
|
|
@ -40,6 +40,7 @@ set(H_HEADER_FILES
|
||||||
include/attributeTableDelegate.h
|
include/attributeTableDelegate.h
|
||||||
include/attributeView.h
|
include/attributeView.h
|
||||||
include/attributeSelector.h
|
include/attributeSelector.h
|
||||||
|
include/maskLayer.h
|
||||||
include/maskManager.h
|
include/maskManager.h
|
||||||
include/customBorderContainer.h
|
include/customBorderContainer.h
|
||||||
include/groupSelectionDialog.h
|
include/groupSelectionDialog.h
|
||||||
|
|
@ -69,6 +70,7 @@ set(CPP_SOURCE_FILES
|
||||||
source/attributeTableDelegate.cpp
|
source/attributeTableDelegate.cpp
|
||||||
source/attributeView.cpp
|
source/attributeView.cpp
|
||||||
source/attributeSelector.cpp
|
source/attributeSelector.cpp
|
||||||
|
source/maskLayer.cpp
|
||||||
source/maskManager.cpp
|
source/maskManager.cpp
|
||||||
source/customBorderContainer.cpp
|
source/customBorderContainer.cpp
|
||||||
source/groupSelectionDialog.cpp
|
source/groupSelectionDialog.cpp
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ class ConnectionDialog;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class MaskLayer;
|
||||||
class CustomBorderContainer;
|
class CustomBorderContainer;
|
||||||
|
|
||||||
class ConnectionDialog : public QDialog
|
class ConnectionDialog : public QDialog
|
||||||
|
|
@ -26,6 +27,9 @@ public:
|
||||||
void setErrorInfo(const QString&);
|
void setErrorInfo(const QString&);
|
||||||
void clearErrorInfo();
|
void clearErrorInfo();
|
||||||
|
|
||||||
|
Q_INVOKABLE void showMask();
|
||||||
|
Q_INVOKABLE void hideMask();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void showEvent(QShowEvent*);
|
virtual void showEvent(QShowEvent*);
|
||||||
virtual void closeEvent(QCloseEvent*);
|
virtual void closeEvent(QCloseEvent*);
|
||||||
|
|
@ -38,6 +42,7 @@ private:
|
||||||
void loadConnInfo(const QString&);
|
void loadConnInfo(const QString&);
|
||||||
|
|
||||||
Ui::ConnectionDialog *ui;
|
Ui::ConnectionDialog *ui;
|
||||||
|
MaskLayer* m_pMaskLayer;
|
||||||
MainWindow* m_pMainWindow;
|
MainWindow* m_pMainWindow;
|
||||||
bool m_isNewStatus;//是否是新建链接编辑状态
|
bool m_isNewStatus;//是否是新建链接编辑状态
|
||||||
int m_curConnListRow;
|
int m_curConnListRow;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ class GroupSelectionDialog;
|
||||||
}
|
}
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
class MaskLayer;
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
class QListWidgetItem;
|
class QListWidgetItem;
|
||||||
class CustomBorderContainer;
|
class CustomBorderContainer;
|
||||||
|
|
@ -24,10 +25,14 @@ public:
|
||||||
void setMainWindow(MainWindow*);
|
void setMainWindow(MainWindow*);
|
||||||
void setModel(int);
|
void setModel(int);
|
||||||
|
|
||||||
|
Q_INVOKABLE void showMask();
|
||||||
|
Q_INVOKABLE void hideMask();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initialize();
|
void initialize();
|
||||||
|
|
||||||
Ui::GroupSelectionDialog* ui;
|
Ui::GroupSelectionDialog* ui;
|
||||||
|
MaskLayer* m_pMaskLayer;
|
||||||
MainWindow* m_pMainWindow;
|
MainWindow* m_pMainWindow;
|
||||||
int m_curModelID;
|
int m_curModelID;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef MASKLAYER_H
|
||||||
|
#define MASKLAYER_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
class MaskLayer : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit MaskLayer(QWidget *parent = nullptr);
|
||||||
|
~MaskLayer();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *event);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //MASKLAYER_H
|
||||||
|
|
@ -59,6 +59,7 @@ public:
|
||||||
T& operator[](int index) { return at(index); }
|
T& operator[](int index) { return at(index); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MaskLayer;
|
||||||
class MaskManager : public QObject
|
class MaskManager : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ class ModelInfoEditDialog;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
class MainWindow;
|
class MainWindow;
|
||||||
|
class MaskLayer;
|
||||||
class QListWidgetItem;
|
class QListWidgetItem;
|
||||||
class CustomBorderContainer;
|
class CustomBorderContainer;
|
||||||
|
|
||||||
|
|
@ -26,6 +27,9 @@ public:
|
||||||
void setMainWindow(MainWindow*);
|
void setMainWindow(MainWindow*);
|
||||||
void setModel(int);
|
void setModel(int);
|
||||||
|
|
||||||
|
Q_INVOKABLE void showMask();
|
||||||
|
Q_INVOKABLE void hideMask();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void showEvent(QShowEvent*);
|
virtual void showEvent(QShowEvent*);
|
||||||
|
|
||||||
|
|
@ -37,6 +41,7 @@ private:
|
||||||
|
|
||||||
Ui::ModelInfoEditDialog* ui;
|
Ui::ModelInfoEditDialog* ui;
|
||||||
DialogState m_state;
|
DialogState m_state;
|
||||||
|
MaskLayer* m_pMaskLayer;
|
||||||
MainWindow* m_pMainWindow;
|
MainWindow* m_pMainWindow;
|
||||||
int m_curModelID;
|
int m_curModelID;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include "connectionDialog.h"
|
#include "connectionDialog.h"
|
||||||
#include "./ui_connectionDialog.h"
|
#include "./ui_connectionDialog.h"
|
||||||
|
#include "maskLayer.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "tableWidgetHoverDelegate.h"
|
#include "tableWidgetHoverDelegate.h"
|
||||||
|
|
@ -78,6 +79,8 @@ void ConnectionDialog::initialize()
|
||||||
m_isNewStatus = false;
|
m_isNewStatus = false;
|
||||||
m_curConnListRow = -1;
|
m_curConnListRow = -1;
|
||||||
|
|
||||||
|
m_pMaskLayer = new MaskLayer(this);
|
||||||
|
|
||||||
QIntValidator* validator = new QIntValidator(0, 9999, this);
|
QIntValidator* validator = new QIntValidator(0, 9999, this);
|
||||||
ui->lineEdit_port->setValidator(validator);
|
ui->lineEdit_port->setValidator(validator);
|
||||||
|
|
||||||
|
|
@ -229,6 +232,16 @@ void ConnectionDialog::clearErrorInfo()
|
||||||
ui->label_error->setText("");
|
ui->label_error->setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConnectionDialog::showMask()
|
||||||
|
{
|
||||||
|
m_pMaskLayer->setGeometry(0, 0, this->width(), this->height());
|
||||||
|
m_pMaskLayer->show();
|
||||||
|
}
|
||||||
|
void ConnectionDialog::hideMask()
|
||||||
|
{
|
||||||
|
m_pMaskLayer->close();
|
||||||
|
}
|
||||||
|
|
||||||
void ConnectionDialog::onComboxChanged_dbType(const QString& text)
|
void ConnectionDialog::onComboxChanged_dbType(const QString& text)
|
||||||
{
|
{
|
||||||
if(text == "PostgreSQL")
|
if(text == "PostgreSQL")
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include "groupSelectionDialog.h"
|
#include "groupSelectionDialog.h"
|
||||||
#include "./ui_groupSelectionDialog.h"
|
#include "./ui_groupSelectionDialog.h"
|
||||||
|
#include "maskLayer.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "sqlQueryExecutor.h"
|
#include "sqlQueryExecutor.h"
|
||||||
#include "textColorPreserveDelegate.h"
|
#include "textColorPreserveDelegate.h"
|
||||||
|
|
@ -36,6 +37,8 @@ GroupSelectionDialog::~GroupSelectionDialog()
|
||||||
|
|
||||||
void GroupSelectionDialog::initialize()
|
void GroupSelectionDialog::initialize()
|
||||||
{
|
{
|
||||||
|
m_pMaskLayer = new MaskLayer(this);
|
||||||
|
|
||||||
TextColorPreserveDelegate* delegate = new TextColorPreserveDelegate(this);
|
TextColorPreserveDelegate* delegate = new TextColorPreserveDelegate(this);
|
||||||
ui->sourceList->setItemDelegate(delegate);
|
ui->sourceList->setItemDelegate(delegate);
|
||||||
ui->selectedList->setItemDelegate(delegate);
|
ui->selectedList->setItemDelegate(delegate);
|
||||||
|
|
@ -92,6 +95,16 @@ void GroupSelectionDialog::setModel(int id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GroupSelectionDialog::showMask()
|
||||||
|
{
|
||||||
|
m_pMaskLayer->setGeometry(0, 0, this->width(), this->height());
|
||||||
|
m_pMaskLayer->show();
|
||||||
|
}
|
||||||
|
void GroupSelectionDialog::hideMask()
|
||||||
|
{
|
||||||
|
m_pMaskLayer->close();
|
||||||
|
}
|
||||||
|
|
||||||
void GroupSelectionDialog::onBtnClicked_save()
|
void GroupSelectionDialog::onBtnClicked_save()
|
||||||
{
|
{
|
||||||
if(!m_pMainWindow)
|
if(!m_pMainWindow)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
#include "maskLayer.h"
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QStyleOption>
|
||||||
|
|
||||||
|
MaskLayer::MaskLayer(QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
{
|
||||||
|
setObjectName("maskLayer");
|
||||||
|
setFocusPolicy(Qt::NoFocus);
|
||||||
|
setAttribute(Qt::WA_TranslucentBackground); // 启用透明背景
|
||||||
|
setStyleSheet("background:rgba(112,128,144,180);");
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
MaskLayer::~MaskLayer()
|
||||||
|
{}
|
||||||
|
|
||||||
|
//重写paintEvent触发背景绘制,否则实例化对象不显示
|
||||||
|
void MaskLayer::paintEvent(QPaintEvent *event)
|
||||||
|
{
|
||||||
|
QStyleOption opt;
|
||||||
|
opt.initFrom(this);
|
||||||
|
QPainter p(this);
|
||||||
|
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
||||||
|
QWidget::paintEvent(event);
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
#include "maskManager.h"
|
#include "maskManager.h"
|
||||||
|
#include "maskLayer.h"
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#include <QMetaMethod>
|
||||||
|
|
||||||
MaskManager* MaskManager::m_instance = nullptr;
|
MaskManager* MaskManager::m_instance = nullptr;
|
||||||
|
|
||||||
|
|
@ -21,12 +23,9 @@ MaskManager::MaskManager(QWidget* mainWindow)
|
||||||
: QObject(mainWindow)
|
: QObject(mainWindow)
|
||||||
, m_mainWindow(mainWindow)
|
, m_mainWindow(mainWindow)
|
||||||
{
|
{
|
||||||
m_maskLayer = new QWidget(m_mainWindow);
|
m_maskLayer = new MaskLayer(m_mainWindow);
|
||||||
//m_maskLayer->setAttribute(Qt::WA_TransparentForMouseEvents, true);
|
// m_maskLayer->setStyleSheet("background:rgba(112,128,144,180);");
|
||||||
m_maskLayer->setObjectName("maskLayer");
|
// m_maskLayer->hide();
|
||||||
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,表示事件被处理,后续过滤器和事件函数不会再被调用
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -46,11 +45,24 @@ void MaskManager::showMask(QWidget* requester)
|
||||||
{
|
{
|
||||||
m_maskLayer->setGeometry(m_mainWindow->rect());
|
m_maskLayer->setGeometry(m_mainWindow->rect());
|
||||||
m_maskLayer->show();
|
m_maskLayer->show();
|
||||||
|
// foreach (QObject* child, m_mainWindow->children())
|
||||||
|
// {
|
||||||
|
// if(qobject_cast<QDialog*>(child) || qobject_cast<QWidget*>(child))
|
||||||
|
// qDebug() << child->objectName();
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QWidget* widget = m_activeRequests.last();
|
QWidget* widget = m_activeRequests.last();
|
||||||
if(widget->parentWidget() == m_mainWindow && widget->isVisible() && !widget->isModal())
|
const QMetaObject* meta = widget->metaObject();
|
||||||
|
int methodIndex = meta->indexOfMethod("showMask()");
|
||||||
|
if(methodIndex != -1)
|
||||||
|
{
|
||||||
|
//QMetaMethod method = meta->method(methodIndex);
|
||||||
|
QMetaObject::invokeMethod(widget, "showMask", Qt::AutoConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if(widget->parentWidget() == m_mainWindow && widget->isVisible() && !widget->isModal())
|
||||||
{
|
{
|
||||||
// qDebug() << "Child Dialog Order:";
|
// qDebug() << "Child Dialog Order:";
|
||||||
// foreach (QObject* child, m_mainWindow->children())
|
// foreach (QObject* child, m_mainWindow->children())
|
||||||
|
|
@ -64,7 +76,7 @@ void MaskManager::showMask(QWidget* requester)
|
||||||
//强制刷新
|
//强制刷新
|
||||||
//m_mainWindow->update();
|
//m_mainWindow->update();
|
||||||
//QApplication::processEvents();
|
//QApplication::processEvents();
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
m_activeRequests.appendUnique(requester);
|
m_activeRequests.appendUnique(requester);
|
||||||
|
|
@ -79,7 +91,11 @@ void MaskManager::hideMask(QWidget* requester)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QWidget* widget = m_activeRequests.last();
|
QWidget* widget = m_activeRequests.last();
|
||||||
widget->raise();
|
const QMetaObject* meta = widget->metaObject();
|
||||||
|
int methodIndex = meta->indexOfMethod("hideMask()");
|
||||||
|
if(methodIndex != -1)
|
||||||
|
QMetaObject::invokeMethod(widget, "hideMask", Qt::AutoConnection);
|
||||||
|
widget->setFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
//qDebug() << "remove requester: " << requester->objectName() << "requester count: " << m_activeRequests.size();
|
//qDebug() << "remove requester: " << requester->objectName() << "requester count: " << m_activeRequests.size();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include "modelInfoEditDialog.h"
|
#include "modelInfoEditDialog.h"
|
||||||
#include "./ui_modelInfoEditDialog.h"
|
#include "./ui_modelInfoEditDialog.h"
|
||||||
|
#include "maskLayer.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "sqlQueryExecutor.h"
|
#include "sqlQueryExecutor.h"
|
||||||
#include "textColorPreserveDelegate.h"
|
#include "textColorPreserveDelegate.h"
|
||||||
|
|
@ -53,6 +54,7 @@ void ModelInfoEditDialog::initialize()
|
||||||
m_state = DS_New;
|
m_state = DS_New;
|
||||||
m_curModelID = -1;
|
m_curModelID = -1;
|
||||||
ui->btnAddGroup->setVisible(false);
|
ui->btnAddGroup->setVisible(false);
|
||||||
|
m_pMaskLayer = new MaskLayer(this);
|
||||||
//正则表达式,只能属于字母
|
//正则表达式,只能属于字母
|
||||||
QRegularExpression regExp("[A-Za-z0-9]+");
|
QRegularExpression regExp("[A-Za-z0-9]+");
|
||||||
QRegularExpressionValidator* validator = new QRegularExpressionValidator(regExp, this);
|
QRegularExpressionValidator* validator = new QRegularExpressionValidator(regExp, this);
|
||||||
|
|
@ -125,6 +127,16 @@ void ModelInfoEditDialog::setModel(int id)
|
||||||
m_curModelID = id;
|
m_curModelID = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelInfoEditDialog::showMask()
|
||||||
|
{
|
||||||
|
m_pMaskLayer->setGeometry(0, 0, this->width(), this->height());
|
||||||
|
m_pMaskLayer->show();
|
||||||
|
}
|
||||||
|
void ModelInfoEditDialog::hideMask()
|
||||||
|
{
|
||||||
|
m_pMaskLayer->close();
|
||||||
|
}
|
||||||
|
|
||||||
void ModelInfoEditDialog::onItemDblCliked_sourceList(QListWidgetItem* item)
|
void ModelInfoEditDialog::onItemDblCliked_sourceList(QListWidgetItem* item)
|
||||||
{
|
{
|
||||||
if(item->data(Qt::UserRole + itemRole_isPublic).toBool())
|
if(item->data(Qt::UserRole + itemRole_isPublic).toBool())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue