12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #ifndef WEAKHINTUTILITY_H
- #define WEAKHINTUTILITY_H
- #include <QDateTime>
- #include <QObject>
- #include <QTimer>
- #include <QVariantAnimation>
- #include <QPropertyAnimation>
- #include <QWidget>
- class GlobalMsgWidget : public QWidget
- {
- Q_OBJECT
- public:
- enum HintMode
- {
- Success = 0,
- Warn = 1,
- Normal = 2,
- Error = 3,
- };
- public:
- explicit GlobalMsgWidget(const QString &msg, HintMode mode, QWidget *parent = nullptr);
- ~GlobalMsgWidget() override{}
- private:
- HintMode m_mode;
- QString m_strMsg;
- // int m_nYPos;
- QDateTime m_dtStart; //弱提示出现的时间(鼠标移入将不断刷新该时间为当前时间)
- QVariantAnimation m_animFlyInOut; //飞入飞出动画
- QPropertyAnimation m_animPos; //控制位置的动画
- QTimer m_timerCheckIfStay;
- private:
- QColor GetBGColor(HintMode mode, int alpha = 255);
- QColor GetTextColor(HintMode mode, int alpha = 255);
- QString GetIconPath(HintMode mode);
- protected:
- virtual void paintEvent(QPaintEvent *) override;
- private slots:
- void CheckIfStay();
- signals:
- void sig_Hide(GlobalMsgWidget *pWeakHint);
- };
- class GlobalMsgMgr : public QObject
- {
- Q_OBJECT
- public:
- static GlobalMsgMgr* Instance(){return sm_pInstance;}
- ~GlobalMsgMgr(){sm_pInstance = nullptr;}
- void SetRootWidget(QWidget *rootWidget);
- QWidget* GetRootWidget(){return m_pRootWidget;}
- void Popup(const QString &msg, GlobalMsgWidget::HintMode mode = GlobalMsgWidget::Normal);
- //begin:指定弹出窗口为父窗口,父窗口释放前需要Clear
- void Popup(const QString &msg, QWidget *parentWidget, GlobalMsgWidget::HintMode mode = GlobalMsgWidget::Normal);
- void Clear(QWidget *parentWidget);
- //end
- private:
- GlobalMsgMgr(QObject *parent = nullptr);
- //防拷贝, C++11
- GlobalMsgMgr(GlobalMsgMgr const&) = delete;
- GlobalMsgMgr& operator=(GlobalMsgMgr const&) = delete;
-
- private:
- static GlobalMsgMgr* sm_pInstance; //单例实例
- static const int skm_nMaxCount = 8;
- QWidget *m_pRootWidget;
- QList<GlobalMsgWidget*> m_listWeakHints;
- QTimer m_timerUpdate;
- private slots:
- void OnWeakHintHide(GlobalMsgWidget *pWeakHint);
- void OnUpdate();
- private:
- /*----------------------------------------------------------------
- * 关于释放全局单例:
- * 一个妥善的方法是让这个类自己知道在合适的时候把自己删除; 或者说把删除自己的操作挂在系统中的某个合适的点上, 使其在恰当的时候自动被执行;
- * 程序在结束的时候, 系统会自动析构所有的全局变量;事实上, 系统也会析构所有的类的静态成员变量, 就像这些静态成员也是全局变量一样;
- * 利用这个特征, 我们可以在单例类中定义一个这样的静态成员变量, 而它的唯一工作就是在析构函数中删除单例类的实例;
- ----------------------------------------------------------------*/
- class GlobalMsgMgrGarbo
- {
- public:
- ~GlobalMsgMgrGarbo()
- {
- if(GlobalMsgMgr::sm_pInstance != nullptr)
- delete GlobalMsgMgr::sm_pInstance;
- }
- };
- static GlobalMsgMgrGarbo garbo;
- /*----------------------------------------------------------------*/
- };
- #endif // WEAKHINTUTILITY_H
|