经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
CQGUI框架之样式管理
来源:cnblogs  作者:IT文艺男  时间:2021/4/6 10:17:54  对本文有异议

大家好,我是IT文艺男,来自一线大厂的一线程序员

今天给大家讲解基于C++/Qt的CQGUI框架的样式管理实现。

在Qt平台,实现窗口/控件美化或者自定义效果,有如下两种方式

  • 重绘
  • 样式

对于重绘,我之前实现的一个效果如下图所示::

对于样式,我之前实现的一个效果如下图所示::

因此,有了重绘以及样式,就能实现高级、复杂的、优雅的UI效果;设计部有什么好的UI效果图,程序员就能把它实现。

Qt样式(Qt StyleSheet,QSS)

QSS的主要功能是使界面的表现与界面的元素分离,使得设计成皮肤与界面控件分离的软件成为可能。QSS的概念、术语、语法很大程度上受到了CSS层叠样式表的影响;由于是所见即所得方式,QSS使用很方便

样式加载方式

  • 在代码中直接嵌入
  • 通过文件加载

优先推荐使用文件加载方式,与代码脱离

CQGUI框架样式

  • 公共样式
  • 插件样式

一、类职责

  1. class StyleSheetManager : public QObject

二、类方法

  1. class StyleSheetManager : public QObject
  2. {
  3. Q_OBJECT
  4. public:
  5. explicit StyleSheetManager(QObject *parent = NULL);
  6. void setStyleSheets(int theme, const std::string& font);
  7. void setStylesForApp(int theme, const std::string& font);
  8. void setStyleSheetForPlugin(const QString& plgName, int theme);
  9. };

主要提供设置公共样式、插件样式的函数接口;与CQGUI框架的样式逻辑保持一致

三、样式文件集合

CQGUI框架的样式文件集合如下图所示::

四、加载公共样式

  1. QString apppath = QString(":/style/style%1/app.qss").arg(theme);
  2. if (QFile::exists(apppath))
  3. {
  4. QFile fileapp(apppath);
  5. if (fileapp.open(QFile::ReadOnly))
  6. {
  7. qss.append(fileapp.readAll().data());
  8. qApp->setStyleSheet(qss.toUtf8());
  9. }
  10. }

五、加载插件样式

  1. QString styleSheetPath = QString(":/style/style%1/%2.qss").arg(theme).arg(plgName);
  2. if (QFile::exists(styleSheetPath))
  3. {
  4. QFile file(styleSheetPath);
  5. //获取插件
  6. QObject* plugin = UIGolbalManager::GetUIGolbalManager()->GetPluginInstanceQt(plgName);
  7. if (plugin)
  8. {
  9. auto *plug = dynamic_cast<UIPluginInterface *>(plugin);
  10. if (plug)
  11. {
  12. if (file.open(QFile::ReadOnly))
  13. {
  14. QString qss = QString::fromUtf8(file.readAll());
  15. plug->setStyleSheet(qss.toUtf8());
  16. }
  17. }
  18. }
  19. }

今天就讲解到这里,更详细的代码分析与讲解,请关注微信公众号(itwenyinan),观看对应的的视频版讲解;谢谢

原文链接:http://www.cnblogs.com/appsucc/p/14618891.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号