PowerModeler/include/maskManager.h

87 lines
1.7 KiB
C
Raw Normal View History

#ifndef MASKMANAGER_H
#define MASKMANAGER_H
#include <QWidget>
#include <QSet>
template <typename T>
class UniqueList
{
private:
QList<T> m_list;
QSet<T> m_set;
public:
const QList<T>& getList() const { return m_list; }
bool isEmpty() { return m_list.isEmpty(); }
int size() const { return m_list.size(); }
void appendUnique(const T& value)
{
if(m_set.contains(value))
return;
m_set.insert(value);
m_list.append(value);
}
void remove(const T& value)
{
if(m_set.remove(value))
{
m_list.removeOne(value);
}
}
T& first()
{
if(m_list.isEmpty())
throw std::out_of_range("UniqueList is empty");
return m_list.first();
}
T& last()
{
if(m_list.isEmpty())
throw std::out_of_range("UniqueList is empty");
return m_list.last();
}
T& at(int index)
{
if (index < 0 || index >= m_list.size())
throw std::out_of_range("Index out of range");
return m_list[index];
}
T& operator[](int index) { return at(index); }
};
2025-04-21 14:29:20 +08:00
class MaskLayer;
class MaskManager : public QObject
{
Q_OBJECT
public:
//初始化时强制关联窗口
static void initialize(QWidget* mainWindow);
static MaskManager* instance();
void showMask(QWidget* requester);
void hideMask(QWidget* requester);
protected:
bool eventFilter(QObject* obj, QEvent* event) override;
private:
explicit MaskManager(QWidget* mainWindow);
static MaskManager* m_instance;
QWidget* m_mainWindow;
QWidget* m_maskLayer;
UniqueList<QWidget*> m_activeRequests;
};
#endif //MASKMANAGER_H