qss无法生效的原因

qss样式(qt style sheet)无法生效的原因

[TOC]

继承于QWidget却未重写paintEvent(QPaintEvent *e)函数

在qss的官方文档中对于QWidget的介绍如下

Supports only the background, background-clip and background-origin properties.
If you subclass from QWidget, you need to provide a paintEvent for your custom >QWidget as below:

对于一个QWidget,它仅仅支持设置背景色的qss,如果一个继承于QWidget的子类想要支持其他的qss,就需要像重新实现paintEvent函数。

QWidget只支持background、background-clip和background-origin属性。

未正确添加Q_OBJECT宏

由于qss是通过Qt的元对象系统(The Meta-Object System)支持,因而需要在头文件中private块中添加Q_OBJECT宏。

qss生效但被子控件遮挡

这一种情况在对容器类空间,如QWidget,QFrame等,对于这类控件设置qss时尤其得注意qss效果是否会被子部件遮挡,尤其注意边框是否挡住。

父控件或者它的父控件在代码中设置了stylesheet,导致子控件设置的样式无效。

两种解决办法

  1. 把父窗口的样式放到qss文件中
  2. 在代码中设置子控件的样式setstylesheet

其他qss样式文件相关问题

  1. qss样式文件中设置样式的上方包含语法错误,导致下面的样式都失效了

在qss文件中,如果某个样式之前设置样式语法错误,可能导致后面的样式都设置不成功。

  1. qss的文件格式不是UTF-8,导致读取到的文件中字符串出现乱码。

其他代码设置样式问题

  1. qss是父子关系的时候是可以传递的。单纯的继承关系不是父子关系,所以继承不具备传递
  2. 重新设置样式时,有可能之前的样式没有去除,导致旧样式一直生效

    解决办法unpolish() 后再polish();

参考

参考网页1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容