1. 程式人生 > >Qt 之設定 QWidget 背景色

Qt 之設定 QWidget 背景色

簡述

QWidget是所有使用者介面物件的基類,這意味著可以用同樣的方法為其它子類控制元件改變背景顏色。

Qt中視窗背景的設定,下面介紹三種方法。

  1. 使用QPalette
  2. 使用Style Sheet
  3. 繪圖事件

一般我不用QSS設定視窗背景,也不建議使用。(這裡是對於視窗而,如果是子部件當然可以)。因為視窗使用QSS設定背景之後,若子部件不使用同樣的方式來設定,預設則會繼承父視窗的樣式。

|

使用QPalette

使用QPalette來設定背景色

m_pWidget = new QWidget(this);
m_pWidget->setGeometry(0, 0, 300
, 100); QPalette pal(m_pWidget->palette()); //設定背景黑色 pal.setColor(QPalette::Background, Qt::black); m_pWidget->setAutoFillBackground(true); m_pWidget->setPalette(pal); m_pWidget->show();

使用Style Sheet

m_pWidget = new QWidget(this);
m_pWidget->setGeometry(0, 0, 300, 100);
m_pWidget->
setStyleSheet("background-color:black;"); m_pWidget->show();

關於子類化QWidget,助手中有段說明:

// If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below:
void CustomWidget::paintEvent(QPaintEvent *)
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()
->
drawPrimitive(QStyle::PE_Widget, &opt, &p, this); }

如果要子類化一個QWidget,為了能夠使用樣式表,則需要提供paintEvent事件。這是因為QWidget的paintEvent()是空的,而樣式表要通過paint被繪製到視窗中。

警告:確保子類化的QWidget定義了Q_OBJECT巨集。

繪圖事件

重寫paintEvent,使用QPainter來繪製背景。

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter p(this);
    p.setPen(Qt::NoPen);
    p.setBrush(Qt::black);
    p.drawRect(rect());
}

更多參考