| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | #ifndef DROPSHADOWMGR_H#define DROPSHADOWMGR_H#include <QObject>#include "idropshadowable.h"class DropShadowMgr : public QObject{    Q_OBJECTpublic:    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
 |