12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #ifndef DROPSHADOWMGR_H
- #define DROPSHADOWMGR_H
- #include <QObject>
- #include "idropshadowable.h"
- class DropShadowMgr : public QObject
- {
- Q_OBJECT
- public:
- static DropShadowMgr* Instance(){return sm_pInstance;}
- ~DropShadowMgr() override {sm_pInstance = nullptr;}
- public:
- //static QMap<BoxShadow, QImage> sm_cacheShadows;
- static QList<BoxShadow> sm_cacheShadows;
- private:
- DropShadowMgr(QObject *parent = nullptr):QObject(parent){}
- //防拷贝, C++11
- DropShadowMgr(DropShadowMgr const&) = delete;
- DropShadowMgr& operator=(DropShadowMgr const&) = delete;
-
- private:
- static DropShadowMgr* sm_pInstance; //单例实例
- public:
- virtual bool eventFilter(QObject *watched, QEvent *event) override;
- /*----------------------------------------------------------------
- * 关于释放全局单例:
- * 一个妥善的方法是让这个类自己知道在合适的时候把自己删除; 或者说把删除自己的操作挂在系统中的某个合适的点上, 使其在恰当的时候自动被执行;
- * 程序在结束的时候, 系统会自动析构所有的全局变量;事实上, 系统也会析构所有的类的静态成员变量, 就像这些静态成员也是全局变量一样;
- * 利用这个特征, 我们可以在单例类中定义一个这样的静态成员变量, 而它的唯一工作就是在析构函数中删除单例类的实例;
- ----------------------------------------------------------------*/
- private:
- class DropShadowMgrGarbo
- {
- public:
- ~DropShadowMgrGarbo()
- {
- if(DropShadowMgr::sm_pInstance != nullptr)
- delete DropShadowMgr::sm_pInstance;
- }
- };
- static DropShadowMgrGarbo garbo;
- /*----------------------------------------------------------------*/
- };
- #endif // DROPSHADOWMGR_H
|