• 2054阅读
  • 0回复

金融交易软件桌面之Qt开发之路(多主题) [复制链接]

上一主题 下一主题
在线toby520
 

只看楼主 倒序阅读 楼主  发表于: 2021-12-11
多主题框架
缘由:
   不同用户对于客户端整体样式的喜好不一,故而产生多主题的框架和产品需求

1. 皮肤基类


  1. ```cpp
  2. ///
  3. /// \brief The IWBSkin class
  4. /// 主图皮肤抽象类
  5. ///
  6. class XX_CORE_EXPORT IXXXSkin:public IXXXInterface
  7. {
  8.     Q_OBJECT
  9. public:
  10.     ///
  11.     /// 获取当前实例对象
  12.     ///
  13.     static XXXSkinManager* instance();
  14.     ~XXXSkinManager();
  15. public:
  16.     /// \brief loadSkin 加载皮肤
  17.     /// \param skinData 皮肤数据(皮肤id或qss样式)
  18.     ///
  19.     virtual void loadSkin(const QVariant& skinData)=0;
  20. };
  21. ```


2. 皮肤管理框架
  1. ```cpp
  2. class XXX_SKIN_EXPORT XXXSkinManager : public QObject
  3. {
  4.     void loadSkinID(const QString& theme);
  5. ///
  6.     ///设置视图和样式关联文件的对应表
  7.     ///每个组件 自动把自己加入到皮肤管理框架进行统一管理
  8.     void addVSMap(IXXXSkin* view,const QString& typeName);
  9. signals:
  10.     void signalThemeChanged(const QString& theme);
  11.     ...
  12.     ...
  13. }
  14. ```

3. 业务组件拥有自动换皮肤功能

  1. ```cpp
  2. class XXXToast : public QDialog,public IXXXSkin
  3. {
  4.     Q_OBJECT
  5.     Q_INTERFACES(IXXXSkin)
  6. public:
  7.     explicit XXXToast (QWidget *parent = nullptr);
  8.     inline QWidget* widget() Q_DECL_OVERRIDE { return this;}
  9.     inline void loadSkin(const QVariant &skinData) Q_DECL_OVERRIDE {if(skinData.isValid()){/*setStyleSheet(""); */setStyleSheet(skinData.toString());}}
  10. ```






4. 皮肤框架深度优化
   4.1 皮肤管理器,只初始化和切换可见组件的样式,不可见的组件暂时不刷新皮肤
   4.2 需要进行注册  事件过滤器进行感知其可见或者不可见
   4.3 性能优化?

5. 示例:











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




QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
快速回复
限100 字节
 
上一个 下一个