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,則有背景色,如果放到一個父窗口中,就沒有效果。添加該句即可!     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM