Chinaunix首页 | 论坛 | 博客
  • 博客访问: 81062
  • 博文数量: 11
  • 博客积分: 289
  • 博客等级: 二等列兵
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-12 14:51
个人简介

linux的爱好者,GNU的支持者。 小白中的牛人,高手中的菜鸟。 个人开源项目:https://sourceforge.net/projects/schultetable

文章分类

全部博文(11)

文章存档

2021年(2)

2017年(3)

2013年(2)

2012年(2)

2011年(2)

分类: C/C++

2021-05-02 21:31:08

前言

qt为我们提供了两种定制样式的方法——qss和qstyle,大部分developer都使用qss定制样式,但有时也会碰到一些奇怪的问题,而qstyle虽然可以进行更深层次的定制,但相对难用,所以使用qstyle进行整体样式定制的方法就变得小众,但除了对整体样式的定制,qstyle还有一些其它的妙用,最常见的是在itemdelegate里绘制某个控件。
虽然说在linux下我们建议使用系统样式而非自定义样式,但商业软件开发似乎永远也逃不出自定义样式的定势,哪怕自定义之后的样式可能还不如用户系统的样式。尤其像deepin、uos等系统的默认桌面系统和样式对各种控件进行了深度定制,很多控件与常见的样式已经有很大的差别,这导致使用qss定制样式的程序跑在这样的环境之下的一些控件会变得面目全非,比如qspinbox

这样放到测试那里肯定是要报bug的,而想要用qss纠正这样的“bug”似乎也非常困难,事实上其原因就是因为qt程序会加载系统的当前样式,并作为每个控件的默认样式,而用于加载系统样式的就是qstyle这一机制。

实施方法:

1.查看系统支持的样式

新建一个qt程序,并加入如下代码

  1. #include <QDebug>
  2. #include <QStyleFactory>


  1. qDebug() << QStyleFactory::keys();
编译执行,这时,命令行会输出当前系统所支持的style
对于linux用户,你的系统可能会有“GTK+”、“Windows”、“Fusion”等style。

2.选定style,并设置为程序的style

你要尽可能选择常见的style,以尽可能多地覆盖到所有桌面系统中,比如我刚才提到的“GTK+”、“Windows”、“Fusion”都是linux系统中比较常见的style。
然后在你的main.cpp加入如下代码:

  1. QApplication a(argc, argv);
  2. QStyle *style = QStyleFactory::create("GTK+");
  3. if (style == nullptr)
  4. {
  5.     style = QStyleFactory::create("Windows");
  6. }
  7. if (style == nullptr)
  8. {
  9.     style = QStyleFactory::create("Fusion");
  10. }
  11. if (style == nullptr)
  12. {
  13.     style = new QCommonStyle;
  14. }
  15. a.setStyle(style);
最后的commonstyle是为了防止这三种style都没有的情况,当然,你也可以直接创建QCommonStyle而不考虑用户系统有什么,只不过QCommonStyle需要做的定制工作要多一些,当然,这样程序的适应性也会更好一些。


版权声明:本文乃pl014原创文章,如需转载,请注明出处。
阅读(1495) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~