#ifndef DROPSHADOWMGR_H #define DROPSHADOWMGR_H #include #include "idropshadowable.h" class DropShadowMgr : public QObject { Q_OBJECT public: static DropShadowMgr* Instance(){return sm_pInstance;} ~DropShadowMgr() override {sm_pInstance = nullptr;} public: //static QMap sm_cacheShadows; static QList 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