Set background of QMainWindow central widget

background-color, qmainwindow, qt

Solution

Ok, the proper answer can be found here, or alternatively by reading the documentation. I need to implement paintEvent for my test class:

class test : public QWidget
{
    Q_OBJECT    // remove this

public:
    QLabel *label;

    test(QWidget *parent = 0) {
        resize(400, 300);
        label = new QLabel(this);
        label->setText("Test");
    };

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

};

Also many thanks to 1+1=2 who read the manual for me at the Qt project forum.

Problem

Using Qt 4.8.4 on Windows 7 (MSVC 2010) I have a standard `QMainWindow` in my app with a toolbar. I want the toolbar to stay grey, but the central widget should have a white background. Calling `centralWidget->setStyleSheet("background-color: white;")` at first seemed to do the job, but using it with a Designer-generated widget (a `Q_OBJECT`) doesn't. Subsequently I toyed around with various other methods to set a style sheet (also using Designer) to no avail. To see this effect, add or remove the `Q_OBJECT` line in `test.h`. When it's there, only the label gets a white bg. If `Q_OBJECT` is commented out, the whole central widget is white. Of course, I want the whole area white, but also need `Q_OBJECT`. Here's the files: main.cpp: ``` #include "test.h" class testwin : public QMainWindow { public: QWidget *centralWidget; QToolBar *mainToolBar; testwin(QWidget *parent = 0) : QMainWindow(parent) { centralWidget = new test(this); setCentralWidget(centralWidget); mainToolBar = new QToolBar(this); this->addToolBar(Qt::TopToolBarArea, mainToolBar); }; ~testwin() {}; }; int main(int argc, char *argv[]) { QApplication a(argc, argv); testwin w; w.centralWidget->setStyleSheet("background-color: white;"); w.show(); return a.exec(); } ``` test.h: ``` #include <QtGui> class test : public QWidget { Q_OBJECT // remove this public: QLabel *label; test(QWidget *parent = 0) { resize(400, 300); label = new QLabel(this); label->setText("Test"); }; }; ``` Status update: - `setStyleSheet("QWidget { background-color: white; }")` does NOT solve the issue - I succeed in making every Widget (including popup dialogs) white, but that's not what I want.

Original source