Qt StyleSheet 作用范围
多么痛的领悟 你曾是我的全部… 哼哼哼… 差点唱起来了. 自己太傻逼了, 早就应该想到Qss
和css
是一样的, 父节点属性默认会被子节点继承. 不过我遇到的问题比较奇葩就是了, 以至于我一时懵逼了, 下面我就来讲讲我的遭遇/(ㄒ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