QT設置窗口背景


    窗口背景無非兩種:背景色、背景圖片。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,則有背景色,若是放到一個父窗口中,就沒有效果。添加該句便可!