#ifndef UISTYLEMANAGER_H #define UISTYLEMANAGER_H #include #include #include /** * @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 m_listWidgets; /* 需要修改样式表的组件列表 */ }; #endif /* UISTYLEMANAGER_H */