Case 1: Create subclass of QWidget with Q_OBJECT and set stylesheet -- no effect.
Case 2: Create subclass of QWidget without Q_OBJECT and set stylesheet -- works as expected
Case 3: Create subclass of QLabel with Q_OBJECT and set stylesheet -- works as expected
How to understand this behavior? Is it possible to make stylesheets work in the case 1?
If you want custom QWidget subclasses to support stylesheets, you need to provide the following code: Qt Code:
void myclass::paintEvent(QPaintEvent *pe)
{
QStyleOption o;
o.initFrom(this);
QPainter p(this);
style()->drawPrimitive(
QStyle::PE_Widget, &o, &p, this);
};
Courtesy of wysota, as well as Qt help.
When you don't provide Q_OBJECT, your class has no Meta data, and hence is considered as a QWidget.
I don't know why they don't work, but I translated to python the code in Werner Erasmus's answer. The following "works for me"™
def paintEvent(self, pe):
o = QStyleOption()
o.initFrom(self)
p = QPainter(self)
self.style().drawPrimitive(QStyle.PE_Widget, o, p, self)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With