Why do stylesheets not work when subclassing QWidget and using Q_OBJECT?

qt

Solution

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.

Problem

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?

Original source