成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt中設置Widget背景顏色及圖片的注意事項

移動開發
本文介紹的是Qt中設置Widget背景顏色及圖片的注意事項,不多說了,先來看內容。

Qt中設置Widget背景顏色圖片的注意事項是本文要介紹的內容,不多說,先來看內容。在Qt中設置widget背景顏色或者圖片方法很多種:重寫paintEvent() , 調色板QPalette , 樣式表setStyleSheet等等。 測試環境:Qt4.5.0 + vc2005

但是各種方法都有其注意事項,如果不注意則很容易陷入麻煩中。

1、setStyleSheet()

這個函數我一直很喜歡使用,因為只要寫一句就可以實現效果,比其他方法都簡單,但是其卻有一個很值得注意的地方,也就是這個地方讓我大吃苦頭。

亦即:
(1)該函數只能用于設置有父窗口的子窗口的背景!如果一個窗口沒有子窗口,則無法使用該函數來設置背景顏色圖片!!

(2)同時:對于一個父窗口而言:如果我們用setStyleShette設置了其樣式,而對于其子窗口:如果沒有用同樣的函數來設置的話, 則其子窗口的樣式和其父窗口完全一致,亦即:其集成了自己父窗口的樣式!

(3)延伸:對頂層窗口(沒有父窗口),其有若干個子窗口,則當我們用setStyleShette來設置這個頂層窗口的樣式后,依據①可知:該父窗口本身沒有任何變化,亦即設置沒有生效;而其子窗口:只要子窗口本身沒有用setStyleShette來設置自己的樣式表,則其就是用的自己父窗口的樣式表!!

例如:

主窗口(沒有父類)為MainWin

  1. MainWin::MainWin()  
  2. {  
  3. this->setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");  
  4. iButton = new QPushButton(this);  
  5. iLabel = new QLabel(iButton);  

運行一下,效果如下:

Qt中設置Widget背景顏色及圖片的注意事項

亦即:雖然我們設置的是頂層的父窗口,但是該樣式卻是在其子窗口中生效,而頂層父窗口沒有任何變化! 這驗證了①。

修改一下上例代碼:

  1. MainWin::MainWin()  
  2. {  
  3. this->setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");  
  4. iButton = new QPushButton(this);  
  5. iLabel = new QLabel(iButton);  
  6. iLabel->setStyleSheet("background-image:url(:/bmp/1257253475842.jpg)");  

則運行效果如下:

Qt中設置Widget背景顏色及圖片的注意事項

可見:子窗口只有調用setStyleSheet()設置了自己的樣式后才可以隔斷父窗口的樣式,否則其將是用父窗口的樣式。

再修改一下代碼:

  1. MainWin::MainWin()  
  2. {  
  3. iButton = new QPushButton(this);  
  4. iButton ->setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");  
  5. iLabel = new QLabel(iButton);   

運行 一下,效果如下

Qt中設置Widget背景顏色及圖片的注意事項

可見:設置有父窗口的子窗口時:setStyleSheet()一定生效!!!

#p#

后來我又思考了一個問題,那就是:對于頂層父窗口,如果我 setStyleSheet()設置了樣式表,而對其子窗口,我用其他方法,比如用QPalette調色板來設置背景圖片/顏色,這時子窗口的背景到底是由繼承自父窗口的樣式表決定呢還是由子窗口本身的QPalette調色板決定呢?

再次修改代碼:

  1. MainWin::MainWin()  
  2. {  
  3. this->setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");  
  4. iButton = new QPushButton(this);  
  5. iLabel = new QLabel(iButton);  
  6. QPalette palette;   
  7. palette.setBrush(iLabel->backgroundRole(),QBrush(QImage(":/bmp/1257253475842.jpg")));  
  8. iLabel->setPalette(palette);  
  9. iLabel->setAutoFillBackground(true);  

此段代碼中我用QPalette來設置子窗口的背景圖片,看下到底是樣式表還是調色板生效,效果如下:

Qt中設置Widget背景顏色及圖片的注意事項

由此 可見:一旦頂層窗口設置了樣式表,則其子窗口無論用什么方法來設置背景,都會不生效!!!

那如果不是頂層窗口而僅僅是一般窗口設置了樣式表呢?再次修改代碼:

  1. MainWin::MainWin()  
  2. {  
  3. iButton = new QPushButton(this);  
  4. iButton ->setStyleSheet("background-image:url(:/bmp/IMG_0345.JPG)");  
  5. iLabel = new QLabel(iButton);  
  6. QPalette palette;   
  7. palette.setBrush(iLabel->backgroundRole(),QBrush(QImage(":/bmp/1257253475842.jpg")));  
  8. iLabel->setPalette(palette);  
  9. iLabel->setAutoFillBackground(true);  

運行 效果同上,這說明:不管是頂層窗口還是一般窗口,只要用setStyleSheet設置了樣式表,則其子窗口用其它方式設置背景顏色/圖片均不生效,只能用同樣方式setStyleSheet來設置更改!!!

為了驗證上邊的結論,再次修改代碼:

  1. MainWin::MainWin()  
  2. iButton = new QPushButton(this);  
  3. iLabel = new QLabel(iButton);  
  4. QPalette palette;   
  5. palette.setBrush(iLabel->backgroundRole(),QBrush(QImage(":/bmp/1257253475842.jpg")));  
  6. iLabel->setPalette(palette);  
  7. iLabel->setAutoFillBackground(true);  

運行一下:

Qt中設置Widget背景顏色及圖片的注意事項 Qt中設置Widget背景顏色及圖片的注意事項

此時調色板才生效,這也間接證明了上述結論。

總結:

1、不要在頂層窗口(無父類的窗口)中使用setStyleSheet() ,否則其一父窗口的背景不會改變,其次其子窗口的背景設置方法變得局限唯一,不能再使用其它方法!

2、如果一個一般窗口(非頂層窗口)還有子窗口,那最好不要使用setStyleSheet()來設置其背景顏色,因為雖然此時該窗口的背景設置是生效的,但是其子窗口的背景設置也變得局限唯一,只能使用setStyleSheet,而不能使用其它方法!  當然:你如果就是只想使用這種方法,那也完全可以!!

說白了就是:不要再MainWindow中使用setStyleSheet()!

而上邊之所以強調拓寬子窗口設置背景的方法范圍,這是因為:如果只能用setStyleSheet樣式表來設置背景圖片的話,該圖片是無法縮放的,如果其大小與widget窗口大小不相符,則我們無法用程序來實現圖片的縮放,除非我們直接處理圖片使其大小與widget窗口相符; 而如果不局限于用setStyleSheet樣式表來設置的話,我們可以選擇用QPalette調色版,其內部setBrush()之前,我們完全可以先對圖片進行scale縮放再刷到窗口上,這樣就避免直接去處理圖片,靈活性強一點!

注意:該文只針對QWidget體系,并不適用用QGraphicsWidget體系!關于這兩種體系之間的區分,詳見文章 http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/09/5571149.aspx

小結:Qt中設置Widget背景顏色及圖片的注意事項的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-09-07 16:24:10

Qt Widget

2011-06-15 13:39:55

Qt Creator

2011-06-23 11:15:25

SEO網站優化

2011-07-04 17:55:59

Qt SDK Windows

2021-04-29 17:06:46

MySQL時間設置

2011-06-16 08:46:17

Qt Symbian 手機

2010-08-17 10:42:37

NAT路由器

2011-04-14 11:28:07

光纖

2011-05-26 11:22:04

SEO

2009-07-15 16:14:36

iBATIS優缺點

2011-06-29 09:56:29

QT UI 動態加載

2011-03-31 13:58:34

cactinagios

2009-11-09 11:01:01

ibmdwPMP

2012-12-20 10:23:03

路由器COST

2010-10-29 16:33:45

ORACLE存儲過程

2009-06-12 09:46:40

Java String

2009-12-03 14:37:47

安裝phpMyAdmi

2009-12-23 15:27:44

2010-09-25 12:59:33

2009-09-24 14:53:43

打印服務器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品1 | 成人亚洲 | av国产在线观看 | av一区二区三区 | 欧美国产日韩一区二区三区 | 亚洲一区二区成人 | 久久国产欧美一区二区三区精品 | 中文字幕一区在线观看视频 | 91啪影院 | 国产99久久精品一区二区永久免费 | 国产成人精品久久 | 国产二区精品视频 | 国产精品不卡 | 成人一区二区在线 | 国产精品我不卡 | 国产日韩一区二区 | 日韩欧美国产精品 | 国产人成精品一区二区三 | 中文字幕在线一区二区三区 | 毛片免费观看视频 | 一区二区三区免费 | 欧美中文字幕在线 | 久久久久成人精品免费播放动漫 | 成人精品一区二区三区 | 久久久91精品国产一区二区三区 | 日本韩国电影免费观看 | 日韩av在线免费 | 福利av在线 | 欧美成人精品激情在线观看 | 欧美午夜在线 | 国产高清视频在线观看 | 国产成人精品福利 | 亚洲免费观看视频 | 自拍第一页 | 97超碰人人 | 日韩欧美福利视频 | 国产目拍亚洲精品99久久精品 | 亚洲男人天堂 | 热re99久久精品国产99热 | 日韩久久久久久 | 婷婷二区 |