PowerModeler/source/maskManager.cpp

57 lines
1.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "maskManager.h"
#include <QEvent>
MaskManager* MaskManager::m_instance = nullptr;
void MaskManager::initialize(QWidget* mainWindow)
{
if(!m_instance)
m_instance = new MaskManager(mainWindow);
}
MaskManager* MaskManager::instance()
{
Q_ASSERT(m_instance);
return m_instance;
}
MaskManager::MaskManager(QWidget* mainWindow)
: QObject(mainWindow)
, m_mainWindow(mainWindow)
{
m_maskLayer = new QWidget(m_mainWindow);
//m_maskLayer->setAttribute(Qt::WA_TransparentForMouseEvents, true);
m_maskLayer->setStyleSheet("background:rgba(112,128,144,180);");
m_maskLayer->hide();
m_mainWindow->installEventFilter(this); //在Qt中时间过滤会按照install的顺序反向执行过程中对于同一类型事件任何一个过滤器返回true表示事件被处理后续过滤器和事件函数不会再被调用
}
bool MaskManager::eventFilter(QObject* obj, QEvent* event)
{
if(obj == m_mainWindow && event->type() == QEvent::Resize)
{
if(m_maskLayer && m_maskLayer->isVisible())
m_maskLayer->setGeometry(m_mainWindow->rect());
}
return QObject::eventFilter(obj, event);
}
void MaskManager::showMask(QWidget* requseter)
{
if(m_activeRequsets.isEmpty())
{
m_maskLayer->setGeometry(m_mainWindow->rect());
//m_maskLayer->raise(); //显示在最上层,后续打开的同级子窗口依然在其之上
m_maskLayer->show();
}
m_activeRequsets.insert(requseter);
}
void MaskManager::hideMask(QWidget* requester)
{
m_activeRequsets.remove(requester);
if(m_activeRequsets.isEmpty())
m_maskLayer->hide();
}