Qt中繼承QWidget設置樣式表失效

在使用Qt的界面時,經常會自定義控件,當我們自定義QWidget控件,即寫一個MyWidget,繼承自QWidget,在MyWidget中設置樣式表,實際運行程序,會發現樣式表設置沒有效果。

原因:qt的樣式表需要通過paintEvent函數來實現,而繼承自QWidget的控件,QWidget的paintEvent函數實現爲空,也就導致了設置樣式表是無法生效的。

解決方法:

在繼承的類中,重寫paintEvent函數

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

注意加上頭文件:

#include <QPainter>
#include <QStyleOption>

當然,以上我們是解決了繼承自QWidget樣式表失效的問題,我們也可以採用繞路的方法,即採用繼承自QFrame的類,QFrame的類中實現了paintEvent函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章