如果遇到这样的问题,并且控件继承与QWidget,那么这个方案也许能解决问题。
解决方案
void SubWidget::paintEvent(QPaintEvent* event) { QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); }
只需要重写控件的paintEvent()函数即可。
原理
参照QtHelp :https://doc.qt.io/archives/qt-4.8/stylesheet-reference.html#list-of-stylable-widgets
文档指出,QWidget默认情况下只支持background、backgrou-clip、background-origin三种属性,如果继承QWidget就需要重新实现paintEvent()函数。
但是实际情况是就算不重写paintEvent(),也只是偶尔会遇到QSS不生效的情况(至少我目前的测试结果是这样,等待大神高见)。
文档中还指出了一个小细节,就是必须在类中使用Q_OBJECT 宏,这个宏会影响类选择器和类型选择器的使用。(如果没有则两个选择器都无法正常使用)
文章评论