在使用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函數。