2011-11-23 101 views
3

我可以創建和看到一個QWidget在主窗口類的功能之一:QWidget的派生類是不可見的

.. 
// ok 
QWidget *w = new QWidget(this); 
w->setGeometry(400,300,400,300); 
w->setStyleSheet("background-color:white;"); 
w->show(); 
.. 

但是當我試圖通過創建自QWidget的派生另一個類做類似的事情,我什麼都看不到:

class MyWidget : public QWidget 
{ 
     public: 
     MyWidget(QWidget *sParent):QWidget(sParent) 
     { 
     } 
}; 

     .. 
     // nothing visible happens. 
     MyWidget *w = new MyWidget(this); 
     w->setGeometry(400,300,400,300); 
     w->setStyleSheet("background-color:white;"); 
     w->show(); 
     .. 

什麼可能導致這種情況?

注:一切有關這個問題:http://pastebin.com/haCHfqnu

+0

這就像唯一的代碼戴夫。重現這種情況很容易。但是我添加了完整的來源。 – sithereal

回答

2

你可以重寫的paintEvent。

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

我認爲這將解決問題。

+0

但我不明白:當我從QWidget派生MyWidget時,我沒有重寫任何QWidget的函數。基本上這意味着函數的基類版本將被調用。所以它應該像一個普通的QWidget一樣行動 – sithereal

+0

我認爲這是一個錯誤。只有QWidget有這種奇怪的行爲。如果您創建另一個像QTextEdit或QPushButton這樣的控件,他們的行爲將與原始類相似。 –

+1

這裏有一些解釋:http://falsinsoft.blogspot.com/2015/02/qt-snippet-use-stylesheet-in-qwidget.html「如果你直接從QWidget對象派生你的類,並希望將一些樣式表標籤自定義界面你會發現你的樣式表設置不起作用,只是一個簡單的樣式表標籤設置後臺顏色不會有任何影響:「 – user3528438

相關問題