4

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

要查看此效果,请添加或删除Q_OBJECT. test.h当它在那里时,只有标签有一个白色的背景。如果Q_OBJECT被注释掉,则整个中央小部件是白色的。当然,我要全区白色,但也需要Q_OBJECT

这是文件:

主.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();
}

测试.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; }")不能解决问题
  • 我成功地将每个小部件(包括弹出对话框)设为白色,但这不是我想要的。
4

3 回答 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);
    }

};

也非常感谢在Qt 项目论坛上为我阅读手册的 1+1=2 。

于 2013-07-30T10:37:54.113 回答
2
w.centralWidget->setStyleSheet("QWidget { background-color: white; }");
于 2013-07-25T14:28:07.033 回答
1

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

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

所以解决这个问题的最好方法是改变那个小部件的背景。

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

#centralwidget {
    background-color: rgb(0, 0, 0);
}
于 2015-07-24T06:20:12.820 回答