2014-10-04 109 views
1

我有3只小窗口的层次结构:为什么QWidget在升级后消失?

enter image description here

每个窗口小部件已背景颜色改变为不同的颜色(使用QSS),使得输出如下所示:

enter image description here

这里都很好。但是,如果我推动widget从QWidget的派生的类消失,像这样:

enter image description here

enter image description here

这是我的Custom插件的代码:

custom.h:

#ifndef CUSTOM_H 
#define CUSTOM_H 

#include <QWidget> 

class Custom : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit Custom(QWidget *parent = 0); 
}; 

#endif // CUSTOM_H 

custom.cpp:

#include "custom.h" 

Custom::Custom(QWidget *parent) : 
    QWidget(parent) 
{ 
} 

任何人都可以解释为什么这些奇怪的事情发生,我能做些什么来使绿色小部件显示?

+0

什么的QSS样子? – 2014-10-04 14:40:01

+0

'background-color:red;','background-color:green;'和'background-color:blue;'使用Designer应用于每个窗口小部件。 – 2014-10-04 14:43:08

回答

2

前段时间我已经回答a similar question :)

为了QSS样式表工作直接QWidget子类,你应该实现paintEvent这样的:

void Custom::paintEvent(QPaintEvent *) 
{ 
    QStyleOption opt; 
    opt.init(this); 
    QPainter p(this); 
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); 
} 
+0

现在这是一百万美元的答案! 但让我明白......为什么我们必须这样做?有什么变化?我重新实现了paint事件并将事件转发给'QWidget',但没有考虑重绘它。为什么我们必须重绘它? – 2014-10-04 14:54:00

+0

我认为当一个QWidget绘制它的时候它不会应用任何样式表,这就是为什么你应该实现绘制事件。您可以在QWidget部分的官方文档中阅读它:http://qt-project.org/doc/qt-4.8/stylesheet-reference.html – hank 2014-10-04 18:13:50