2013-07-25 32 views
2

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

要查看此效果,请在test.h中添加或删除Q_OBJECT行。当它在那里,只有标签得到一个白色的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

确定,适当的答案可以发现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手册我。

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

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

1

有一个更好的方法来做到这一点。

如您所知,每个QMainWindow都有一个中央控件,默认情况下名称为centralwidget

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

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

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