1. 程式人生 > >QT設定視窗背景

QT設定視窗背景


    視窗背景無非兩種:背景色、背景圖片。qt中視窗背景設定的方法有三種: 一、QPalette設定背景 二、實現paintEvent,使用QPainter來繪製背景 三、使用QSS來設定背景     關於QSS的使用不想多說,一般我不用QSS設定視窗背景,也不建議使用。(注意:這裡是對於視窗而言)。如果是子部件當然可以。因為視窗使用QSS設定背景之後,若子部件不使用同樣的方式來設定,預設則會繼承父視窗的樣式     子部件一般情況下也不需要設定背景圖片,即使需要使用QSS也完全可以滿足。設定較多的是背景色與圖示,QSS中使用background或者background-color的方式可以實現背景色的設定,圖示則可以使用setPixmap或者setIcon來設定!
    下面介紹QPalette以及paintEvent 一、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()是等價的!
二、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,則有背景色,如果放到一個父視窗中,就沒有效果。新增該句即可!