设置QMainWindow中心窗口部件的背景

4
在Windows 7 (MSVC 2010)上使用Qt 4.8.4,我有一个带工具栏的标准应用程序中的。我想让工具栏保持灰色,但中心小部件应该是白色背景。调用centralWidget->setStyleSheet("background-color: white;")似乎起初能达到目的,但在使用Designer生成的小部件(一个Q_OBJECT)时不能实现。接着,我尝试使用各种其他方法来设置样式表(也使用Designer),但都无法实现。
要查看此效果,请添加或删除test.h中的Q_OBJECT行。当它存在时,只有标签会获得白色背景。如果注释掉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; }") 不能解决该问题。
  • 我成功地使所有小部件(包括弹出式对话框)变为白色,但这不是我想要的。
3个回答

4

好的,正确的答案可以在这里找到,或者通过阅读文档获得。我需要为我的测试类实现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在 Qt项目论坛上为我阅读手册。


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

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

3

有一种更好的方法来实现这个。

众所周知,每个QMainWindow都有一个中央窗口部件,并且默认情况下命名为centralwidget

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

当我们使用样式表时,这非常简单。在这种情况下,样式表应该如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接