天天看點

Qt 設定 QWidget 背景色

                Qt 設定 QWidget 背景色

簡述

QWidget是所有使用者界面對象的基類,這意味着可以用同樣的方法為其它子類控件改變背景顔色。

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

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

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

使用QPalette

使用QPalette來設定背景色

  1. ​m_pWidget = new QWidget(this);​

  2. ​m_pWidget->setGeometry(0, 0, 300, 100);​

  3. ​QPalette pal(m_pWidget->palette());​

  4. ​//設定背景黑色​

  5. ​pal.setColor(QPalette::Background, Qt::black);​

  6. ​m_pWidget->setAutoFillBackground(true);​

  7. ​m_pWidget->setPalette(pal);​

  8. ​m_pWidget->show();​

使用Style Sheet

使用樣式表來設定背景色,可以參考:​​Qt Style Sheets文檔​​

  1. ​m_pWidget = new QWidget(this);​

  2. ​m_pWidget->setGeometry(0, 0, 300, 100);​

  3. ​m_pWidget->setStyleSheet("background-color:black;");​

  4. ​m_pWidget->show();​

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

  1. ​// If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below:​

  2. ​void CustomWidget::paintEvent(QPaintEvent *)​

  3. ​{​

  4. ​QStyleOption opt;​

  5. ​opt.init(this);​

  6. ​QPainter p(this);​

  7. ​style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);​

  8. ​}​

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

警告:確定子類化的QWidget定義了Q_OBJECT宏。

繪圖事件

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

  1. ​void Widget::paintEvent(QPaintEvent *event)​

  2. ​{​

  3. ​Q_UNUSED(event);​

  4. ​QPainter p(this);​

  5. ​p.setPen(Qt::NoPen);​

  6. ​p.setBrush(Qt::black);​

  7. ​p.drawRect(rect());​

  8. ​}​

1. 在QtCreator設計器中,選中widget

Qt 設定 QWidget 背景色

2. 在右側屬性欄中找到 styleSheet,點選最右邊的 “...”

Qt 設定 QWidget 背景色

3. 選擇 “添加顔色“,輸入background-color: rgb(0, 0, 106);