Qt setStyleSheet it not working

  • I have a class called MyWidget and I'm trying to load a global style using this code on my main.cpp:

    QFile file(":/style.qss");
    QString stylesheet = file.readAll();

    And it's working, the problem now is that I want to change in that file the background color of my MyWidget. I tried to use the setObjectName('MyWidget') and do something like:

    QWidget#MyWidget {
        background-color: yellow;

    But it doesn't work. What to do?

  • @yugosonegi
    If MyWidget is a subclass of QWidget did you see the docs related to this...

    Supports only the background, background-clip and background-origin properties.
    If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below:

    void CustomWidget::paintEvent(QPaintEvent *)
    QStyleOption opt;
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);

    The above code is a no-operation if there is no stylesheet set.
    Warning: Make sure you define the Q_OBJECT macro for your custom widget."

    Other than that it should work.

  • With your answer it means that I can't chance the background the way I'm doing? I can't understand your answer right.

  • Lifetime Qt Champion


    mr @kenchan says

    If you MyWidget is a class you made yourself. ( versus one of Qts just named MyClass)
    you need to do as he shows in your class
    paintEvent for a stylesheet to have any effect.

    So is MyWidget your own class ?
    as in
    class MyWidget : QWidget {}

  • Yes, it's a subclass of QWidget.

  • Lifetime Qt Champion

    Ok, for such a custom widget , you must use the code shown in paintEvent for it to use
    stylesheet at all. ( you can have extra code for own drawing but QStyleOption and drawPrimitive
    should be used also/first)

Log in to reply

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.