Qt 之設定 QWidget 背景色
阿新 • • 發佈:2019-01-31
簡述
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
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());
}