在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; }")
无法解决问题答案 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);
}