Qt StyleSheet 作用范围

多么痛的领悟 你曾是我的全部… 哼哼哼… 差点唱起来了. 自己太傻逼了, 早就应该想到Qsscss是一样的, 父节点属性默认会被子节点继承. 不过我遇到的问题比较奇葩就是了, 以至于我一时懵逼了, 下面我就来讲讲我的遭遇/(ㄒoㄒ)/~~

事情的起因

在开发界面的过程中, 莫名其面的QTableWidget的滚动条变成方块了, 然后我单独开启一个项目测试又是正常的, 感觉非常奇怪
后来我惊讶的发现只要把QTableWidget的父节点QWidget改成删除就好了, 我想当然的以为是QWidget的bug, 我就把父节点QWidget换成QFrame, 居然可以了, 这让我更加确信是QWidget的bug了, 也让我走进了万劫不复的深渊
然后我继续忙, 突然间QTableWidget的滚动条又变成方块了, 遂陷入沉思, 最后决定放弃, 先把滚动条关闭再说, 不想再折腾这个东西了(已经折腾两天了/(ㄒoㄒ)/~~)
在写Qss的时候不小心写错了个单词, 然后发现控制台出现了, 好几个相同的报错, 遂想到是不是当前节点的子节点也修改了这个属性呢? 当时还没想到是这个原因导致的滚动条bug(前面说了我已经放弃了)
再后来我不甘心继续找滚动条bug的原因, 我还怀疑是Qt版本的问题, 于是就用一个旧版本去重新实现该功能, 发现一切正常, 我又相当然的以为真是Qt的bug, 然后我大喜欢把项目迁移的旧版Qt上, 又发现直接用旧版本Qt打开.ui文件滚动条bug还在, 于是乎我就用旧版本Qt重新吧界面画了一遍, 一开始的时候还没问题, 但是当我改完细节后, 立马就不行了, 滚动条bug又出现了
于是乎我慢慢的撤销代码, 一步一步测试, 最后发现是设置了Qss才导致的滚动条bug, 突然灵光一闪记起来了之前的写出单词导致控制台出现相同的报错, 一切的线索都链接起来了
终于知道为什么连google都找不答案, 原来是直接太傻逼了, 最后搜索 qt stylesheet搜索框下面直接出现了qt stylesheet 仅限当前, 我想我肯定找到答案了

选择器

选择器 实例 描述
通用选择器 * 匹配所有的widget
类型选择器 QPushButton 匹配所有的QPushButton实例和继承于它的子类
属性选择器 QPushButton[flat=”false”] 匹配所有非flat的QPushButton(通常情况下,使用Q_PROPERTY宏来声明你的属性,比如此例中的flat),并且要注意,你的属性类型要受 QVariant::toString()支持(查看toString()方法的帮助文档以获取更详细的解释).
这个选择器类型也可以用来判断动态属性,要了解更多使用自定义动态属性的细节,请参考使用自定义动态属性 。
除了使用=,你还可以使用~=来判断一个QStringList中是否包含给定的QString。
警告:如果在设置了样式表后,相应的属性值发生了改变(如:flat变成了”true”),则有必要重新加载样式表,一个有效的方法是,取消样式表,再重新设置一次,下面的代码是其中一种方式:
style()->unpolish(this);
style()->polish(this);// force a stylesheet recomputation
类选择器 .QPushButton 匹配所有的QPushButton实例,但不包括它的子类,与*[class~=”QPushButton”]是等价的。
ID选择器 QPushButton#okButton 匹配所有object name为”okButton”的QPushButton实例。
后裔选择器 QDialog QPushButton 匹配所有继承于QDialog(包括其所有子孙)的QPushButton实例。
子选择器 QDialog > QPushButton 匹配所有直接继承与QDialog的QPushButton实例。

参考资料

http://blog.csdn.net/qq_24571549/article/details/64131396
http://blog.csdn.net/vonger/article/details/7899101