Please nominate your Qt Champions for 2021!

Custom Widget is not visible in Widget window

  • I have created my own custom widget class, the code is below:

    class myWidget : public QWidget
        explicit myWidget(QWidget*parent=nullptr): QWidget(parent){}
        void enterEvent(QEvent *event) override

    In widget.cpp I have created it's instance, like below

    myWidget *w;
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
        w=new myWidget(this);
        w->setStyleSheet("background-color: rgb(138, 226, 52);");

    As you can see my object is child of the thiswidgetwindow but whenever I run the program it won't be visible to me in the window but when i go to top bottom i can see the console output of mine Entered, So it is present in my Widget window but I am not able to see it even I have set the background color as green, If I just use the Qt GUI to add one Widget into the form and set the background color and run the code then that Widget which I added from the GUI is visible but MyWidget which i created by my own custom widget is not visible.

  • Lifetime Qt Champion

    How do your paintEvent look like for myWidget?
    It has to be like

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

    to use a stylesheet.

  • @mrjj Thanks it works, Can you please explain the logic behind it? because if we do the same without using my own class it works but when I do the same by inheriting I have to modify the paintEvent as you told.

  • Lifetime Qt Champion

    For some reason, the QWidget::paintEvent is empty so once subclassed
    its not doing anything. I never really found out how come plain QWidget can
    work but I guess that QStyle somehow makes it possible as long its a plain QWidget.
    So when we subclass it, we have to draw using QStyle to make a stylesheet take effect.

  • @devillIsHeree
    I don't actually know the logic, it is just in the documentation

    If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below:

    And if you feel it a little annoying to write a paintEvent, there's a trick that I was told by @JonB :


    add this in your custom widget's constructor.

Log in to reply