相信大家都注意到了这样一种情况,通过Qt Creator的UI Designer中拖拽设计ui,选择以QWidget为基类重新设计一个ui文件,那么在这种情况下这个ui文件就没有直接的父窗口,在UI文件中对设置样式表,在UI Designer中样式表生效了,然后运行程序后,发现该页面对应的对象样式表并没有生效,这是什么情况呢?
通过几多搜索分析,得到的结论是QWidget类没有对paintEvent函数进行重载,故样式表无法进行刷新生效,如果ui文件以QWidget为基类,程序运行后该窗口设置的样式表是无法生效的。
解决方法:
- 不使用QWidget为基类,例如使用QFrame
- 重载paintEvent函数也可以实现样式表的绘制
- 对该类在构造函数中设置setAttribute(Qt::WA_StyledBackground);属性,推荐此种方法,简单有效。