UIStyleManager.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #ifndef UISTYLEMANAGER_H
  2. #define UISTYLEMANAGER_H
  3. #include <QObject>
  4. #include <QWidget>
  5. #include <QList>
  6. /**
  7. * @brief UI样式
  8. *
  9. */
  10. enum class EUIStyle
  11. {
  12. UI_Light = 0, /* 亮色 */
  13. UI_Dark = 1 /* 暗色 */
  14. };
  15. /* 将枚举类型注册进Qt系统 */
  16. Q_DECLARE_METATYPE(EUIStyle)
  17. #define UIStyle UIStyleManager::getInstance()
  18. /**
  19. * @brief 全局皮肤管理器,大部分的UI从这里加载qss文件
  20. * 1、普通的Widget直接在这里打开qss文件,qss文件使用widget的objectbname来获取,qss文件要全小写
  21. * 2、普通的widget通过注册过来指针,注册后会自动修改样式表,widget在析构的时候要主动remove掉
  22. * 3、如果是高度封装的组件,直接使用信号槽机制来修改样式表
  23. *
  24. */
  25. class UIStyleManager : public QObject
  26. {
  27. Q_OBJECT
  28. UIStyleManager();
  29. UIStyleManager(const UIStyleManager& config) = delete;
  30. UIStyleManager& operator=(const UIStyleManager& config) = delete;
  31. public:
  32. ~UIStyleManager() {}
  33. static UIStyleManager& getInstance()
  34. {
  35. static UIStyleManager config;
  36. return config;
  37. }
  38. /* 获取样式表路径 */
  39. QString getQSSPath();
  40. /* 换肤,修改样式表 */
  41. void setUIStyle(EUIStyle style);
  42. /* 获取当前UI风格 */
  43. EUIStyle getUIStyle() const { return m_UIStyle; }
  44. /* 注册需要修改样式表的组件 */
  45. void registerWidget(QWidget* widget);
  46. /* 注销需要修改样式表的组件 */
  47. void unregisterWidget(QWidget* widget);
  48. signals:
  49. /* 样式表改变了,这个信号给那些高度封装的组件使用的 */
  50. void signal_qssChanged(EUIStyle style);
  51. private:
  52. /* 读取qss样式文件 */
  53. void readQSSFile();
  54. /* 修改已经注册到这里的widget的qss */
  55. void changeListWidget(EUIStyle style);
  56. private:
  57. EUIStyle m_UIStyle; /* 当前UI样式 */
  58. QString m_qssPath; /* 样式表路径 */
  59. const QString m_lightQSS = "/white"; /* 亮色样式表路径 */
  60. const QString m_darkQSS = "/dark"; /* 暗色样式表路径 */
  61. QList<QWidget*> m_listWidgets; /* 需要修改样式表的组件列表 */
  62. };
  63. #endif /* UISTYLEMANAGER_H */