2014-10-04 419 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