1. 程式人生 > >QT-繼承QWidget 設定樣式無效解決

QT-繼承QWidget 設定樣式無效解決

在繼承QWidget時,我們在設定樣式表時,不會有效果。原因在於 QWidget的paintEvent函式實現為空。

此時,需要讓樣式表生效,有兩種方法:

  1. 不繼承QWidget,繼承QFrame。因為QFrame 的自帶paintEvent函式已做了實現,在使用樣式表時會進行解析和繪製。
  2. 實現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;" );

建議採用第二種方式。