QT-繼承QWidget 設定樣式無效解決
阿新 • • 發佈:2019-02-18
在繼承QWidget時,我們在設定樣式表時,不會有效果。原因在於 QWidget的paintEvent函式實現為空。
此時,需要讓樣式表生效,有兩種方法:
- 不繼承QWidget,繼承QFrame。因為QFrame 的自帶paintEvent函式已做了實現,在使用樣式表時會進行解析和繪製。
- 實現QWidget的paintEvent函式時,使用QStylePainter繪製:
void CLGWidgetBasic::paintEvent(QPaintEvent *event) { QStylePainter painter(this); //用style畫背景 (會使用setstylesheet中的內容) QStyleOption opt; opt.initFrom(this); opt.rect=rect(); painter.drawPrimitive(QStyle::PE_Widget, opt); QWidget::paintEvent(event); }
這裡的QStyleOption .rect為 樣式生效的區域,可以根據需要調整。
設定樣式:
CLGWidgetBasic *widget=new CLGWidgetBasic(this);
widget->setStyleSheet( " background-color:red;" );
建議採用第二種方式。