Qt 设置窗口背景图片的几种方法
1.在paintEvent事件中繪制圖片
void Widget::paintEvent(QPaintEvent * ev) {QPainter painter(this);painter.drawPixmap(rect(),QPixmap(":/bg.jpg"),QRect()); }drawPixmap在Widget的整個(gè)矩形區(qū)域繪制背景圖片,第三個(gè)參數(shù)為要繪制的圖片區(qū)域,傳入空的矩形表示整個(gè)圖片區(qū)域。通過(guò)這種方式可以將圖片平鋪到窗口上,缺點(diǎn)就是要使用paintEvent事件需要新建一個(gè)類,不適合子窗口。
2.使用調(diào)色板QPalette來(lái)設(shè)置圖片
QPalette pal =this->palette(); pal.setBrush(QPalette::Background,QBrush(QPixmap(":/bg.jpg"))); setPalette(pal);首先獲得Widget的調(diào)色板,然后設(shè)置設(shè)置調(diào)色板背景(setBrush),最后將調(diào)色板設(shè)置到Widget中。
3. 使用樣式表(setStyleSheet)
使用樣式表可以很方便設(shè)置界面,而且非常高效,還能讓界面和邏輯分離。真的是Qt里非常好用的一個(gè)東西,設(shè)置背景圖片的語(yǔ)句也很簡(jiǎn)單.
setStyleSheet("border-image:url(:/bg.jpg)");一句話就搞定了,這里使用border-image屬性可以讓圖片平鋪到窗口,效果與第二點(diǎn)一樣。不過(guò)在本例中由于Widget是頂層窗口,所以直接設(shè)置樣式表也不會(huì)顯示。所以樣式表比較適合子窗口來(lái)使用。
注意這三者的使用:
4.使用間接的方式來(lái)設(shè)置背景
比如說(shuō)在窗口上覆蓋一個(gè)QLabel,這個(gè)label始終與窗口一樣大。然后在label中設(shè)置圖片,視覺效果上和直接給窗口設(shè)置背景圖片一樣。
Widget::Widget(QWidget *parent) :QWidget(parent) {m_lblBg = new QLabel(this);m_lblBg ->setPixmap(QPixmap(":/bg.jpg"));m_lblBg ->setScaledContents(true); } void Widget::resizeEvent(QResizeEvent * ev) {m_lblBg->resize(this->size()); }創(chuàng)建一個(gè)label作為Widget的子窗口,然后設(shè)置圖片。通過(guò)在Widget的resizeEvent事件中設(shè)置label的大小與Widget一致。這里需要注意調(diào)用QLabel的setScaledContents(true),否則效果和第一種一樣。由于QLabel可以用來(lái)顯示動(dòng)圖因此使用這種方式可以實(shí)現(xiàn)窗口的動(dòng)態(tài)背景圖片。
如果你用的是界面類的話,你還可以通過(guò)Widget等畫布,放大到和窗口一樣大小,然后再畫布上加載圖片,從而達(dá)到設(shè)置背景圖的效果。
總結(jié)
以上是生活随笔為你收集整理的Qt 设置窗口背景图片的几种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 学习笔记——matplotlib学习
- 下一篇: 运行matplotlib出现:Attri