Qt 設定 QWidget 背景色
簡述
QWidget是所有使用者界面對象的基類,這意味着可以用同樣的方法為其它子類控件改變背景顔色。
Qt中視窗背景的設定,下面介紹三種方法。
- 使用QPalette
- 使用Style Sheet
- 繪圖事件
一般我不用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
使用樣式表來設定背景色,可以參考:Qt Style Sheets文檔
-
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());
-
}
1. 在QtCreator設計器中,選中widget
2. 在右側屬性欄中找到 styleSheet,點選最右邊的 “...”
3. 選擇 “添加顔色“,輸入background-color: rgb(0, 0, 106);