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),造成没有清空缓冲区)
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzg0Ny9hZTNiMzMyMzE1MzRkYmM2MGU0MzljNDc5ODViM2UzNy5KUEVH.JPEG?w=700&webp=1)
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzI3NC81ZmFkMjhmMTEyN2E3NTZiMjFmYTFlNzNlZDM5ZjQ1YS5KUEVH.JPEG?w=700&webp=1)
Qss样式实现的具体过程
以QPushButton为例
-
加载qss的时候是先子后父,show()确保风格设置上去的时候,是先父后子
-
子与父qss加载的过程就是将相应解析的qss放到QHash表中
-
加载qss qstylesheetstyle.cppQVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QObject *obj) const
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzI0LzI4ODE1OGFjZjQ0YzljN2E4YjM4NzgwOWEyN2RlNjg4LnBuZw%3D%3D.png?w=700&webp=1)
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzYwNy9kYjgyNTUyNDQ5NjEyNzdiMjU2ZmUwZWJmODQ4NzZmZi5wbmc%3D.png?w=700&webp=1)
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)
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzk0MS9lMTc4NDQ5NTFmOTkzMTg4NjY3ZDY1MDAwODg0ZTFjNS5KUEVH.JPEG?w=700&webp=1)
3.加载qss与生成样式对象均由QRenderRule QStyleSheetStyle::renderRule(const QObject *obj, int element, quint64 state) const函数调用
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzgxMC9hZDBiYjQ5MTUyNWI4NDI0ZWE5ZmVjYmVjZDMyMDA0Mi5KUEVH.JPEG?w=700&webp=1)
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzI0MS9jNjFlNDgwNDhlOGY3Nzc3NjQ1Y2Q0MmJkMWEzNjhmMS5wbmc%3D.png?w=700&webp=1)
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzI0MS9jNjFlNDgwNDhlOGY3Nzc3NjQ1Y2Q0MmJkMWEzNjhmMS5wbmc%3D.png?w=700&webp=1)
4.绘制Button
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzEzMS9lNzc1YzFjODU1M2M5YmM4NzA0MTYzYjdjZjI1MTgwMy5wbmc%3D.png?w=700&webp=1)
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzYxNS9iZmFkNzMyYTI4ZmVkOGUyYWFhOWE2MTdmYzMwOTc3Ny5KUEVH.JPEG?w=700&webp=1)
![QSS设置不生效问题 QSS设置不生效问题](https://image.shishitao.com:8440/aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzEzMS9lNzc1YzFjODU1M2M5YmM4NzA0MTYzYjdjZjI1MTgwMy5wbmc%3D.png?w=700&webp=1)