軟體的介面為了更直觀或美觀,常常需要透過圖片來表達。我們知道Qt中所有介面類的祖先是QWidget,因此學會給QWidget設定圖片是必須掌握的技能之一。但是程式設計是沒有標準答案的,達到同一效果可以有許多不同的方法。那麼給視窗設定背景圖片又有多少種方法呢?接下來透過寫個測試例子看看。
首先使用QtCreator新建一個基於QWidget的工程,然後給工程新增一個資原始檔,接著在資原始檔中新增一張圖片bg。jpg。
1.使用調色盤QPalette來設定圖片。
首先獲得Widget的調色盤,然後設定設定調色盤背景(setBrush),最後將調色盤設定到Widget中。
由於圖片太大導致整個視窗顯示不下。
2.在paintEvent事件中繪製圖片。
drawPixmap在Widget的整個矩形區域繪製背景圖片,第三個引數為要繪製的圖片區域,傳入空的矩形表示整個圖片區域。
透過這種方式可以將圖片平鋪到視窗上,缺點就是要使用paintEvent事件需要新建一個類,不適合子視窗。
3. 使用樣式表(setStyleSheet).
使用樣式表可以很方便設定介面,而且非常高效,還能讓介面和邏輯分離。真的是Qt裡非常好用的一個東西,設定背景圖片的語句也很簡單。
一句話就搞定了,這裡使用border-image屬性可以讓圖片平鋪到視窗,效果與第二點一樣。不過在本例中由於Widget是頂層視窗,所以直接設定樣式表也不會顯示。所以樣式表比較適合子視窗來使用。
4.使用間接的方式來設定背景
,比如說在視窗上覆蓋一個QLabel,這個label始終與視窗一樣大。然後在label中設定圖片,視覺效果上和直接給視窗設定背景圖片一樣。
建立一個label作為Widget的子視窗,然後設定圖片。透過在Widget的resizeEvent事件中設定label的大小與Widget一致。這裡需要注意呼叫QLabel的setScaledContents(true),否則效果和第一種一樣。由於QLabel可以用來顯示動圖因此使用這種方式可以實現視窗的動態背景圖片。
作者:fearlazy 文章內容僅代表個人觀點,如有雷同請為我點個贊吧!