设置QMainWindow中央小部件的背景

时间:2013-07-25 14:22:10

标签: qt background-color qmainwindow

在Windows 7上使用Qt 4.8.4(MSVC 2010)我的应用程序中有一个带有工具栏的标准QMainWindow。我希望工具栏保持灰色,但中央小部件应该有白色背景。最初调用centralWidget->setStyleSheet("background-color: white;")似乎可以完成这项工作,但将它与Designer生成的小部件(Q_OBJECT)一起使用则不然。随后我玩弄了各种其他方法来设置样式表(也使用Designer)无济于事。

要查看此效果,请在Q_OBJECT中添加或删除test.h行。当它在那里时,只有标签获得白色bg。如果注释掉Q_OBJECT,则整个中央窗口小部件为白色。当然,我希望整个区域都是白色的,但也需要Q_OBJECT

这是文件:

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

状态更新:

  • setStyleSheet("QWidget { background-color: white; }")无法解决问题
  • 我成功地使每个Widget(包括弹出对话框)变白,但这不是我想要的。

3 个答案:

答案 0 :(得分:4)

好的,可以找到正确答案here,或者阅读文档。我需要为我的测试类实现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谁在the Qt project forum为我阅读了本手册。

答案 1 :(得分:2)

w.centralWidget->setStyleSheet("QWidget { background-color: white; }");

答案 2 :(得分:1)

有一种更好的方法可以做到这一点。

如您所知,每个QMainWindow都有一个中央窗口小部件,默认情况下名为centralwidget

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

当我们使用样式表时,它非常简单。在这种情况下将是以下一个:

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