Qt中如何使用樣式表QPalette以及相關注意事項

轉載自http://blog.csdn.net/nrc_douningbo/article/details/5571187

 

 

設置一個widget的背景圖片/顏色,我們可以使用調色板QPalette,而設置最重要的就是setBrush()畫刷。剛google搜索了一下,發現用setBrush基本都只用了它的一種方法,但實際上其有兩種用法。

 

QPalette  palette;

 

      用法一:palette.setBrush(QPalette::Base, brush);

                        palette1.setBrush(QPalette::Active, QPalette::Base, brush);

 

       上述兩種方式大同小異,除去group這一參數歪,其餘兩個參數一模一樣,其中第二個參數代表顏色角色

        其主要通過枚舉變量QPalette::ColorRole來定義,常用的枚舉值有:

    QPalete::Window,通常指窗口部件的背景色;

    QPalette:WindowText,通常指窗口不見的前景色;

    QPalette::Base,指文本輸入窗口部件(比如QtextEdit,QLinedit等)的背景色.

    QPalette::Text,與QPalette::Base一塊使用,指文本輸入窗口部件的前景色;

    QPalette::Button,指按鈕窗口部件的背景色;

    QPalette::ButtonText,指按鈕窗口部件的前景色.

 

 

 (上段枚舉引用自博文:http://hi.baidu.com/tpxc/blog/item/4e7c72277682ba09918f9da8.html

 

 

    從上邊這些枚舉變量可知:針對不同的Qt控件,當我們用QPalette設置其背景/前景顏色時:需要指定不同的顏色角色參數

 

      比如:對於QTextEdit,設置其背景時要使用QPalette::Base ; 對於QWidget則使用QPalette::Window 。如果指定錯了,則這個調色板的使用會不生效!!

(我用QPalette::Button來設置一個QPushButton的背景,卻一直不能生效,誰可以告訴我原因還是系統BUG?)

 

 

 

    用法二: palette.setBrush(ptr->backgroundRole(),brush())

 

      此時第一個參數直接取某一個窗口的顏色角色,而不是人爲的去設置!用這種方式的好處在於:不用去考慮哪種控件該用哪個角色參數,這樣避免出錯! 但是這裏有一個很重要的問題需要去注意:對於QTextEdit的背景角色,按照上邊所說應該是QPalette::Base這個枚舉值,其value爲9。  但是當我們隊QTextEdit控件調用backgrounRole()返回其角色值時:卻發現這個值爲10.顯然二者不對應,但是對於QPushButton卻是對應的!  對於這一點我感到很困惑!但是卻一直沒找到合理的解釋,只有一種可能,那就是:這是一個系統BUG !  

      所以上邊提示我們:當用QPalette調色板來設置QTextEdit這個控件的背景顏色時:不要調用其自己的backgrounRole()來設置顏色角色,而應該自己手動設置成QPalette::Base !切記切記!!!!

 

===============================================================================

 

 

      那轉回到QGraphicsWidget體系中QTextEdit背景顏色的設置上來:

我們將一個QWidget或其子類的控件用addWidget加入到到scene場景中時,我們可以認爲其做了兩步:

      首先:其建了一個代理item窗口,並將這個QWidget控件放到這個代理item窗口中去!

      而後:它再講這個代理item像常規那樣放到scene場景中!!!

      所以:當將一個QTextEdit放到scene場景中後,我們可以認爲其前後有三層:最底下一層是場景所在的view,中間一層是代理item窗口,最上邊一層纔是真正的QTextEdit編輯框。  那麼:要想讓編輯框透明,看到view這一層,則不僅僅需要將QTextEdit本身設置爲背景透明,而且還要將其所在的代理item窗口也設置爲背景透明! 

 

     將QTextEdit設置爲背景透明就用QPalette::Base爲參來設置即可!而對於代理item窗口,其背景顏色角色枚舉值爲:QPalette::Window  (這個是我挨個試出來的,畢竟代理Item窗口QGraphicsProxyWidget類沒有backgroundRole()函數 )。

 

 

   總結:QPalette雖然很好用,但是其中存在諸多問題,而且對於一些特殊情況:幫助文檔上也沒有給出說明,這些如若不注意都會出現很多問題。

發佈了23 篇原創文章 · 獲贊 28 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章