bug
描述:
TableView
表头初始化后,选中item
的表头没有按照产品qss
样式显示
Bug
原因:
两次设置qss
时,由于缓存中没有更新qss
样式,造成样式显示的还是原来的样式
修改方案:
第一种:设置qss
之后,使用addWidget(
)代替直接传父
第二种:设置qss
之后,使用setParent()
方式代替直接传父
Demo
复现
:
QWidget
*
pWidget
=
new
QWidget
;
QPushButton
*
pPushButton
=
new
QPushButton
(
"test----ddddd"
);
pPushButton->setParent(pWidget);
pWidget->setStyleSheet(
"QPushButton{color:yellow}"
);
pWidget->setStyleSheet(
"QPushButton{color:red}"
);
//
pPushButton->setParent(pWidget);
pWidget->show();
备注:
1.QSS是父子关系的时候是可以传递的。继承关系不是父子关系,所以继承不具备传递。
2.Qt5.1.1
没有此bug
(每次设置qss
时,会清空缓冲区)
3.Qt5.5.1
有这个bug
(第二次设置qss
时,d->polish
为假,直接返回,所以没有调用roxy->repolish(
this)
,造成没有清空缓冲区)
![](https://i-blog.csdnimg.cn/blog_migrate/ae3b33231534dbc60e439c47985b3e37.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/5fad28f1127a756b21fa1e73ed39f45a.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/ae3b33231534dbc60e439c47985b3e37.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/5fad28f1127a756b21fa1e73ed39f45a.jpeg)
Qss
样式实现的具体过程
以
QPushButton
为例
- 加载qss的时候是先子后父,show()确保风格设置上去的时候,是先父后子
- 子与父qss加载的过程就是将相应解析的qss放到QHash表中
- 加载qss qstylesheetstyle.cpp
QVector<QCss::StyleRule> QStyleSheetStyle::styleRules( const QObject *obj) const
![](https://i-blog.csdnimg.cn/blog_migrate/fca82f9020d4f8f61d418add8ea802b5.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/bf119a13d36fc9352c650b9ef5cbcc7d.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/288158acf44c9c7a8b387809a27de688.png)
![](https://i-blog.csdnimg.cn/blog_migrate/db8255244961277b256fe0ebf84876ff.png)
2.
生成颜色对象
qstylesheetstyle.cpp
QRenderRule
::QRenderRule(
const
QVector
<Declaration>
&declarations,
const
QObject
*object)
:
features
(
0
),
hasFont
(
false
),
pal
(
0
),
b
(
0
),
bg
(
0
),
bd
(
0
),
ou
(
0
),
geo
(
0
),
p
(
0
),
img
(
0
),
clipset
(
0
)
![](https://i-blog.csdnimg.cn/blog_migrate/e17844951f993188667d65000884e1c5.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/e17844951f993188667d65000884e1c5.jpeg)
3.
加载
qss
与生成样式对象均由
QRenderRule
QStyleSheetStyle
::renderRule(
const
QObject
*obj,
int
element,
quint64
state)
const
函数调用
![](https://i-blog.csdnimg.cn/blog_migrate/ad0bb491525b8424ea9fecbecd320042.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/c61e48048e8f7777645cd42bd1a368f1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ad0bb491525b8424ea9fecbecd320042.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/c61e48048e8f7777645cd42bd1a368f1.png)
4.
绘制
Button
![](https://i-blog.csdnimg.cn/blog_migrate/e775c1c8553c9bc8704163b7cf251803.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bfad732a28fed8e2aaa9a617fc309777.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/e775c1c8553c9bc8704163b7cf251803.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bfad732a28fed8e2aaa9a617fc309777.jpeg)