窗口背景無非兩種:背景色、背景圖片。qt中窗口背景設置的方法有三種:
1、
QPalette設置背景
2、實現paintEvent,使用QPainter來繪製背景
3、使用QSS來設置背景
關於QSS的使用不想多說,通常我不用QSS設置窗口背景,也不建議使用。(
注意:
這裏是對於窗口而言)。若是是子部件固然能夠。由於窗口使用QSS設置背景以後,若子部件不使用一樣的方式來設置,默認則會繼承父窗口的樣式
子部件通常狀況下也
不須要設置背景圖片,即便須要使用QSS也徹底能夠知足。設置較多的是背景色與圖標,QSS中使用background或者background-color的方式能夠實現背景色的設置,圖標則可使用setPixmap或者setIcon來設置!
下面介紹
QPalette以及
paintEvent
1、QPalette設置背景
構造函數中可使用以下方式:
(1)設置背景色
QPalette
palette
(this->palette());
palette.setColor(QPalette::Background, Qt::black);
this->setPalette(
palette
);
或:
QPalette palette;
palette.setBrush(this->backgroundRole(), Qt::black);
this->setPalette(palette);
這裏
setColor
和setBrush均可以使用!
(2)設置背景圖片
QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size());
QPalette
palette
(this->palette());
palette
.setBrush(QPalette::Background, QBrush(pixmap));
this->
setPalette(
palette
);
上面方式不管設置背景色仍是背景圖片QPalette::Background與this->backgroundRole()是等價的!
2、paintEvent設置背景
(1)設置背景色
void IIIMark::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setBrush(Qt::black);
painter.drawRect(this->rect());
}
(2)設置背景圖片
void IIIMark::paintEvent(QPaintEvent *)
{
QPixmap pixmap = QPixmap(":/qm/safe").scaled(this->size());
QPainter painter(this);
painter.drawPixmap(this->rect(), pixmap);
}
注意:
(1)以上都是用
scaled方式對圖片進行了適應窗口大小的設置,由於所給的圖片大小不必定知足要求,因此採用此方式!固然圖片通過拉伸或者壓縮以後會變形(純色圖片除外),因此對圖片採用此方式時須要注意。
(2)設置背景範圍的時候若是須要充滿整個窗口最好使用this->rect(),由於我看到不少人在使用QRect(0, 0, 400, 400)之類的語句,那麼若是窗口大小改變了呢?此句是否是要跟着變呢?
(3)若是須要背景圖片或者背景色隨能夠發生改變時,也就是所謂的換膚功能,則採用paintEvent的方式,在須要改變的時候使用update()來進行更新。
(4)
this->setAutoFillBackground(true)又讓我想起了tr(),被不少人濫用。這句話在何時使用呢?不妨採用
QPalette設置背景的方式加上與去掉這句話對比一下(在有父窗口的狀況下使用)。
若是這個QWidget直接show,則有背景色,若是放到一個父窗口中,就沒有效果。添加該句便可!