12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #ifndef UISTYLEMANAGER_H
- #define UISTYLEMANAGER_H
- #include <QObject>
- #include <QWidget>
- #include <QList>
- /**
- * @brief UI样式
- *
- */
- enum class EUIStyle
- {
- UI_Light = 0, /* 亮色 */
- UI_Dark = 1 /* 暗色 */
- };
- /* 将枚举类型注册进Qt系统 */
- Q_DECLARE_METATYPE(EUIStyle)
- #define UIStyle UIStyleManager::getInstance()
- /**
- * @brief 全局皮肤管理器,大部分的UI从这里加载qss文件
- * 1、普通的Widget直接在这里打开qss文件,qss文件使用widget的objectbname来获取,qss文件要全小写
- * 2、普通的widget通过注册过来指针,注册后会自动修改样式表,widget在析构的时候要主动remove掉
- * 3、如果是高度封装的组件,直接使用信号槽机制来修改样式表
- *
- */
- class UIStyleManager : public QObject
- {
- Q_OBJECT
- UIStyleManager();
- UIStyleManager(const UIStyleManager& config) = delete;
- UIStyleManager& operator=(const UIStyleManager& config) = delete;
- public:
- ~UIStyleManager() {}
- static UIStyleManager& getInstance()
- {
- static UIStyleManager config;
- return config;
- }
- /* 获取样式表路径 */
- QString getQSSPath();
- /* 换肤,修改样式表 */
- void setUIStyle(EUIStyle style);
- /* 获取当前UI风格 */
- EUIStyle getUIStyle() const { return m_UIStyle; }
- /* 注册需要修改样式表的组件 */
- void registerWidget(QWidget* widget);
- /* 注销需要修改样式表的组件 */
- void unregisterWidget(QWidget* widget);
-
- signals:
- /* 样式表改变了,这个信号给那些高度封装的组件使用的 */
- void signal_qssChanged(EUIStyle style);
- private:
- /* 读取qss样式文件 */
- void readQSSFile();
- /* 修改已经注册到这里的widget的qss */
- void changeListWidget(EUIStyle style);
- private:
- EUIStyle m_UIStyle; /* 当前UI样式 */
- QString m_qssPath; /* 样式表路径 */
- const QString m_lightQSS = "/white"; /* 亮色样式表路径 */
- const QString m_darkQSS = "/dark"; /* 暗色样式表路径 */
- QList<QWidget*> m_listWidgets; /* 需要修改样式表的组件列表 */
-
- };
- #endif /* UISTYLEMANAGER_H */
|