标题:金融交易软件桌面之Qt开发之路(多主题)
作者:toby520
日期:2021-12-11 23:36
内容:
多主题框架
缘由:
不同用户对于客户端整体样式的喜好不一,故而产生多主题的框架和产品需求
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 皮肤管理器,只初始化和切换可见组件的样式,不可 ..