查了一些国内的和国外的资料,也没找到比较合理的解释,不过解决方法是有的。
- 方法一就是重写paintEvent方法:
Qt:
void CustomWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.initForm(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
PyQt5、Pyside2:
def paintEvent(self, event: QPaintEvent) -> None:
opt = QStyleOption()
opt.initFrom(self)
painter = QPainter(self)
self.style().drawPrimitive(QStyle.PE_Widget, opt, painter, self)
- 方法二就是,如果自定义的QWidget不是顶层窗体的话,其实也没必要非得继承QWidget,可以考虑继承QFrame,可以避免上述重写paintEvent方法。
参考链接:
- https://stackoverflow.com/questions/18344135/why-do-stylesheets-not-work-when-subclassing-qwidget-and-using-q-object/18344643
- https://forum.qt.io/topic/100691/custom-qwidget-setstylesheet-not-working-python/2