优化、完善遮罩逻辑
This commit is contained in:
parent
3d4fa337ca
commit
3916dc5515
|
|
@ -40,6 +40,7 @@ set(H_HEADER_FILES
|
|||
include/attributeTableDelegate.h
|
||||
include/attributeView.h
|
||||
include/attributeSelector.h
|
||||
include/maskLayer.h
|
||||
include/maskManager.h
|
||||
include/customBorderContainer.h
|
||||
include/groupSelectionDialog.h
|
||||
|
|
@ -69,6 +70,7 @@ set(CPP_SOURCE_FILES
|
|||
source/attributeTableDelegate.cpp
|
||||
source/attributeView.cpp
|
||||
source/attributeSelector.cpp
|
||||
source/maskLayer.cpp
|
||||
source/maskManager.cpp
|
||||
source/customBorderContainer.cpp
|
||||
source/groupSelectionDialog.cpp
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ class ConnectionDialog;
|
|||
QT_END_NAMESPACE
|
||||
|
||||
class MainWindow;
|
||||
class MaskLayer;
|
||||
class CustomBorderContainer;
|
||||
|
||||
class ConnectionDialog : public QDialog
|
||||
|
|
@ -26,6 +27,9 @@ public:
|
|||
void setErrorInfo(const QString&);
|
||||
void clearErrorInfo();
|
||||
|
||||
Q_INVOKABLE void showMask();
|
||||
Q_INVOKABLE void hideMask();
|
||||
|
||||
protected:
|
||||
virtual void showEvent(QShowEvent*);
|
||||
virtual void closeEvent(QCloseEvent*);
|
||||
|
|
@ -38,6 +42,7 @@ private:
|
|||
void loadConnInfo(const QString&);
|
||||
|
||||
Ui::ConnectionDialog *ui;
|
||||
MaskLayer* m_pMaskLayer;
|
||||
MainWindow* m_pMainWindow;
|
||||
bool m_isNewStatus;//是否是新建链接编辑状态
|
||||
int m_curConnListRow;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ class GroupSelectionDialog;
|
|||
}
|
||||
QT_END_NAMESPACE
|
||||
|
||||
class MaskLayer;
|
||||
class MainWindow;
|
||||
class QListWidgetItem;
|
||||
class CustomBorderContainer;
|
||||
|
|
@ -24,10 +25,14 @@ public:
|
|||
void setMainWindow(MainWindow*);
|
||||
void setModel(int);
|
||||
|
||||
Q_INVOKABLE void showMask();
|
||||
Q_INVOKABLE void hideMask();
|
||||
|
||||
private:
|
||||
void initialize();
|
||||
|
||||
Ui::GroupSelectionDialog* ui;
|
||||
MaskLayer* m_pMaskLayer;
|
||||
MainWindow* m_pMainWindow;
|
||||
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); }
|
||||
};
|
||||
|
||||
class MaskLayer;
|
||||
class MaskManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ class ModelInfoEditDialog;
|
|||
QT_END_NAMESPACE
|
||||
|
||||
class MainWindow;
|
||||
class MaskLayer;
|
||||
class QListWidgetItem;
|
||||
class CustomBorderContainer;
|
||||
|
||||
|
|
@ -26,6 +27,9 @@ public:
|
|||
void setMainWindow(MainWindow*);
|
||||
void setModel(int);
|
||||
|
||||
Q_INVOKABLE void showMask();
|
||||
Q_INVOKABLE void hideMask();
|
||||
|
||||
protected:
|
||||
virtual void showEvent(QShowEvent*);
|
||||
|
||||
|
|
@ -37,6 +41,7 @@ private:
|
|||
|
||||
Ui::ModelInfoEditDialog* ui;
|
||||
DialogState m_state;
|
||||
MaskLayer* m_pMaskLayer;
|
||||
MainWindow* m_pMainWindow;
|
||||
int m_curModelID;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "connectionDialog.h"
|
||||
#include "./ui_connectionDialog.h"
|
||||
#include "maskLayer.h"
|
||||
#include "mainwindow.h"
|
||||
#include "settings.h"
|
||||
#include "tableWidgetHoverDelegate.h"
|
||||
|
|
@ -78,6 +79,8 @@ void ConnectionDialog::initialize()
|
|||
m_isNewStatus = false;
|
||||
m_curConnListRow = -1;
|
||||
|
||||
m_pMaskLayer = new MaskLayer(this);
|
||||
|
||||
QIntValidator* validator = new QIntValidator(0, 9999, this);
|
||||
ui->lineEdit_port->setValidator(validator);
|
||||
|
||||
|
|
@ -229,6 +232,16 @@ void ConnectionDialog::clearErrorInfo()
|
|||
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)
|
||||
{
|
||||
if(text == "PostgreSQL")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "groupSelectionDialog.h"
|
||||
#include "./ui_groupSelectionDialog.h"
|
||||
#include "maskLayer.h"
|
||||
#include "mainwindow.h"
|
||||
#include "sqlQueryExecutor.h"
|
||||
#include "textColorPreserveDelegate.h"
|
||||
|
|
@ -36,6 +37,8 @@ GroupSelectionDialog::~GroupSelectionDialog()
|
|||
|
||||
void GroupSelectionDialog::initialize()
|
||||
{
|
||||
m_pMaskLayer = new MaskLayer(this);
|
||||
|
||||
TextColorPreserveDelegate* delegate = new TextColorPreserveDelegate(this);
|
||||
ui->sourceList->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()
|
||||
{
|
||||
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 "maskLayer.h"
|
||||
#include <QEvent>
|
||||
#include <QApplication>
|
||||
#include <QDialog>
|
||||
#include <QMetaMethod>
|
||||
|
||||
MaskManager* MaskManager::m_instance = nullptr;
|
||||
|
||||
|
|
@ -21,12 +23,9 @@ MaskManager::MaskManager(QWidget* mainWindow)
|
|||
: QObject(mainWindow)
|
||||
, m_mainWindow(mainWindow)
|
||||
{
|
||||
m_maskLayer = new QWidget(m_mainWindow);
|
||||
//m_maskLayer->setAttribute(Qt::WA_TransparentForMouseEvents, true);
|
||||
m_maskLayer->setObjectName("maskLayer");
|
||||
m_maskLayer->setStyleSheet("background:rgba(112,128,144,180);");
|
||||
m_maskLayer->hide();
|
||||
|
||||
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,表示事件被处理,后续过滤器和事件函数不会再被调用
|
||||
}
|
||||
|
||||
|
|
@ -46,11 +45,24 @@ void MaskManager::showMask(QWidget* requester)
|
|||
{
|
||||
m_maskLayer->setGeometry(m_mainWindow->rect());
|
||||
m_maskLayer->show();
|
||||
// foreach (QObject* child, m_mainWindow->children())
|
||||
// {
|
||||
// if(qobject_cast<QDialog*>(child) || qobject_cast<QWidget*>(child))
|
||||
// qDebug() << child->objectName();
|
||||
// }
|
||||
}
|
||||
else
|
||||
{
|
||||
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:";
|
||||
// foreach (QObject* child, m_mainWindow->children())
|
||||
|
|
@ -64,7 +76,7 @@ void MaskManager::showMask(QWidget* requester)
|
|||
//强制刷新
|
||||
//m_mainWindow->update();
|
||||
//QApplication::processEvents();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
m_activeRequests.appendUnique(requester);
|
||||
|
|
@ -79,7 +91,11 @@ void MaskManager::hideMask(QWidget* requester)
|
|||
else
|
||||
{
|
||||
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();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "modelInfoEditDialog.h"
|
||||
#include "./ui_modelInfoEditDialog.h"
|
||||
#include "maskLayer.h"
|
||||
#include "mainwindow.h"
|
||||
#include "sqlQueryExecutor.h"
|
||||
#include "textColorPreserveDelegate.h"
|
||||
|
|
@ -53,6 +54,7 @@ void ModelInfoEditDialog::initialize()
|
|||
m_state = DS_New;
|
||||
m_curModelID = -1;
|
||||
ui->btnAddGroup->setVisible(false);
|
||||
m_pMaskLayer = new MaskLayer(this);
|
||||
//正则表达式,只能属于字母
|
||||
QRegularExpression regExp("[A-Za-z0-9]+");
|
||||
QRegularExpressionValidator* validator = new QRegularExpressionValidator(regExp, this);
|
||||
|
|
@ -125,6 +127,16 @@ void ModelInfoEditDialog::setModel(int 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)
|
||||
{
|
||||
if(item->data(Qt::UserRole + itemRole_isPublic).toBool())
|
||||
|
|
|
|||
Loading…
Reference in New Issue