Qt 设置QMainWindow中心小部件的背景

Qt 设置QMainWindow中心小部件的背景,qt,background-color,qmainwindow,Qt,Background Color,Qmainwindow,在Windows7(MSVC2010)上使用Qt4.8.4,我的应用程序中有一个带有工具栏的标准QMainWindow。我希望工具栏保持灰色,但中心小部件应该有白色背景。调用centralWidget->setStyleSheet(“背景色:白色;”)一开始似乎可以完成这项工作,但将其与设计器生成的小部件(一个Q_对象)一起使用则不行。随后,我玩弄了各种其他方法来设置样式表(也使用Designer),但都无济于事 要查看此效果,请在test.h中添加或删除Q\u对象行。当它在那里时,只有标签得到

在Windows7(MSVC2010)上使用Qt4.8.4,我的应用程序中有一个带有工具栏的标准
QMainWindow
。我希望工具栏保持灰色,但中心小部件应该有白色背景。调用
centralWidget->setStyleSheet(“背景色:白色;”)一开始似乎可以完成这项工作,但将其与设计器生成的小部件(一个
Q_对象
)一起使用则不行。随后,我玩弄了各种其他方法来设置样式表(也使用Designer),但都无济于事

要查看此效果,请在
test.h
中添加或删除
Q\u对象
行。当它在那里时,只有标签得到白色背景。如果
Q_OBJECT
被注释掉,则整个中央小部件为白色。当然,我希望整个区域为白色,但也需要
Q\u对象

以下是文件:

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();
}
#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");
    };
};
test.h:

#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();
}
#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");
    };
};
#包括
类测试:公共QWidget
{
Q_OBJECT//删除此
公众:
QLabel*标签;
测试(QWidget*parent=0){
调整大小(400300);
标签=新的QLabel(本);
标签->设置文本(“测试”);
};
};
状态更新:

  • setStyleSheet(“QWidget{background color:white;}”)
    无法解决此问题
  • 我成功地使每个小部件(包括弹出对话框)变成白色,但这不是我想要的

好的,可以找到正确的答案,或者阅读文档。我需要为我的测试类实现paintEvent:

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);
    }

};

也非常感谢1+1=2,他们在上为我阅读了手册。

有更好的方法

如您所知,每个
QMainWindow
都有一个中心小部件,默认情况下,它的名称为
centralwidget

因此,解决这个问题的最佳方法是更改该小部件的背景

使用样式表非常简单。在这种情况下,将出现以下情况:

#centralwidget {
    background-color: rgb(0, 0, 0);
}

没有帮助-相同的行为,灰色背景上的白色标签:(