多主题框架
缘由:
不同用户对于客户端整体样式的喜好不一,故而产生多主题的框架和产品需求
1. 皮肤基类
- ```cpp
- ///
- /// \brief The IWBSkin class
- /// 主图皮肤抽象类
- ///
- class XX_CORE_EXPORT IXXXSkin:public IXXXInterface
- {
- Q_OBJECT
- public:
- ///
- /// 获取当前实例对象
- ///
- static XXXSkinManager* instance();
- ~XXXSkinManager();
- public:
- /// \brief loadSkin 加载皮肤
- /// \param skinData 皮肤数据(皮肤id或qss样式)
- ///
- virtual void loadSkin(const QVariant& skinData)=0;
- };
- ```
2. 皮肤管理框架
- ```cpp
- class XXX_SKIN_EXPORT XXXSkinManager : public QObject
- {
- void loadSkinID(const QString& theme);
- ///
- ///设置视图和样式关联文件的对应表
- ///每个组件 自动把自己加入到皮肤管理框架进行统一管理
- void addVSMap(IXXXSkin* view,const QString& typeName);
- signals:
- void signalThemeChanged(const QString& theme);
- ...
- ...
- }
- ```
3. 业务组件拥有自动换皮肤功能
- ```cpp
- class XXXToast : public QDialog,public IXXXSkin
- {
- Q_OBJECT
- Q_INTERFACES(IXXXSkin)
- public:
- explicit XXXToast (QWidget *parent = nullptr);
- inline QWidget* widget() Q_DECL_OVERRIDE { return this;}
- inline void loadSkin(const QVariant &skinData) Q_DECL_OVERRIDE {if(skinData.isValid()){/*setStyleSheet(""); */setStyleSheet(skinData.toString());}}
- ```
4. 皮肤框架深度优化
4.1 皮肤管理器,只初始化和切换可见组件的样式,不可见的组件暂时不刷新皮肤
4.2 需要进行注册 事件过滤器进行感知其可见或者不可见
4.3 性能优化?
5. 示例:


未完待续.......................