一、導(dǎo)讀
哇,一個(gè)軟件界面的顏值是引人注目的焦點(diǎn),這些“超凡脫俗”的東西是開發(fā)人員的杰作嗎?說是但也不是,首先軟件界面會由專業(yè)的人員迸發(fā)靈感的去設(shè)計(jì)和美化,接著才是開發(fā)人員的場地,如果沒有美化的步驟,放幾個(gè)按鈕和文本就搞定啦,這也太...。
對于Qt來說,所有的可視小部件的基類都是QWidget:
如何為一個(gè)界面加入設(shè)計(jì)好的背景圖則是界面美化的核心操作之一,實(shí)現(xiàn)的方法有多種,本文將總結(jié)幾種常使用的方法。對于如何“挖框貼圖”則需要根據(jù)具體的界面內(nèi)容來定,沒有統(tǒng)一的方法了。
二、方法實(shí)現(xiàn)
(2-1)使用paintEvent()實(shí)現(xiàn)
paintEvent()是QWidget的一個(gè)虛函數(shù):
voidQWidget::paintEvent(QPaintEvent*event)
則可以重載這個(gè)函數(shù),然后在這個(gè)函數(shù)中使用QPainter設(shè)置背景圖片。如下代碼:
voidWidget::paintEvent(QPaintEvent*event) { Q_UNUSED(event) QPainterpainter(this); painter.setRenderHint(QPainter::Antialiasing); painter.drawPixmap(rect(),QPixmap(":/images/bk.png")); }
效果如下:
該種方式本質(zhì)上是利用繪制事件來完成的,繪制事件是一個(gè)請求,用于重新繪制全部或部分小部件。發(fā)生在以下幾種情況下:
1、repaint()或update()被調(diào)用。
2、小部件由遮擋變?yōu)轱@示的情況。
3、一些未知的情況,哈哈。
為了提高性能,可以使用QPixmap提前將待繪制的圖片加載進(jìn)來,然后進(jìn)行繪制。
(2-2)使用樣式表實(shí)現(xiàn)
樣式表是Qt的一大亮點(diǎn),可以使用setStyleSheet()設(shè)置樣式表來設(shè)置窗體的背景圖,代碼如下:
Widget::Widget(QWidget*parent) :QWidget(parent), ui(newUi::Widget) { ui->setupUi(this); setAttribute(Qt::WA_StyledBackground); this->setStyleSheet("border-image/images/bk.png)"); }
(2-3)使用QLabel實(shí)現(xiàn)
在QLabel這個(gè)標(biāo)簽類中有一個(gè)void setPixmap(const QPixmap &)可用于為QLabel設(shè)置一個(gè)Pixmap,所以可以使用這種方法設(shè)置背景圖:把QLabel的大小設(shè)置成與窗體的大小一樣,然后使用setPixmap設(shè)置背景圖片即可,這樣QLabel的背景圖就會完全填充整個(gè)窗體的背景。
這種方法在需要拼接的窗體背景中較為常用。例如下圖是一個(gè)由五個(gè)QLabel拼接的界面:
如果想要設(shè)置背景圖片(此處準(zhǔn)備了一張背景圖top_bk.png),使用下述代碼即可(此處設(shè)置一個(gè)QLabel,其他的一樣):
ui->label->setPixmap(QPixmap(":/images/top_bk.png"));
效果如下:
注意:使用QLabel進(jìn)行背景圖片拼接時(shí),必須要保證QLabel的大小與待拼接的圖片的大小一樣,才能顯示出完整的效果。
(2-4)使用QPalette實(shí)現(xiàn)
可以直接在構(gòu)造函數(shù)中使用QPalette設(shè)置背景圖片,如下代碼:
QPalettepalette=this->palette(); palette.setBrush(QPalette::Window,QBrush(QPixmap(":/images/bk.png"))); this->setPalette(palette);
效果如下圖所示:
三、小生總結(jié)
文本總結(jié)了四種設(shè)置窗體背景圖片的方法,在實(shí)際項(xiàng)目開發(fā)過程中,小生對QPainter情有獨(dú)鐘,感覺萬物皆可QPainter,所以特別喜歡使用paintEvent()來設(shè)置背景圖片:對于完整的背景圖片,可以直接在代碼中使用這種方法來實(shí)現(xiàn);對于需要拼接的背景圖片,小生習(xí)慣使用paintEvent()+QLabel來實(shí)現(xiàn)。用樣式表設(shè)置背景圖片的方法也會使用到,對于QPlalette設(shè)置背景圖這種方式較少使用。
殊途同歸,選擇一種喜歡的方法使用即可,目前硬件性能對于軟件來說,還是有極強(qiáng)的支持性和剩余性能,故個(gè)人認(rèn)為一般情況下不必過多考慮性能方面的影響。
審核編輯:湯梓紅
-
界面
+關(guān)注
關(guān)注
0文章
59瀏覽量
15601 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62323 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68229 -
Qt
+關(guān)注
關(guān)注
1文章
301瀏覽量
37782 -
窗體
+關(guān)注
關(guān)注
0文章
10瀏覽量
1461
原文標(biāo)題:Qt這四種設(shè)置窗體背景的方法,都知道嗎?
文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論