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