2013-12-13 105 views
1

我試圖支持主題爲我的應用程序,我遇到問題,我必須更改基於QPushButton狀態的圖標(默認,懸停,按下,等等。)。以下是我用它來設置一個QPushButton的圖標:由於懸停狀態使用需要從我的黑暗的主題圖標的背景使用Qt樣式表更改狀態更改圖標

QPushButton#playButton { 
    qproperty-icon: url(":/light/icons/play_light.png"); 
} 

,我試圖將其更改爲其他使用此:

QPushButton#playButton:hover { 
    qproperty-icon: url(":/dark/icons/play_dark.png"); 
} 

當我這樣做時,play_light.png顯示它應該,但它不會更改爲play_dark.png狀態更改。

QPushButton#playButton[isPlaying="true"] { 
    qproperty-icon: url(":/light/icons/stop_light.png"); 
} 

這不會改變我:

在我的Python代碼,播放按鈕變爲回放停止按鈕,所以在我的風格,我把它使用自定義屬性設置爲圖標無論是。所以,我發現了一些代碼網上重置樣式按鈕,它看起來像這樣:

self.ui.playButton.setProperty('isPlaying', not isEnable) 
self.ui.playButton.setStyle(qApp.style()) 

我不想使用此解決方法單按鈕單一的狀態變化。你們之前遇到過這個問題嗎?

感謝您的時間看着這個。

回答

0

想通了。我一直在我表格上的圖標,讓我知道它的圖標跑到哪一個,但在我的樣式表,我做了這樣的事情:

QPushButton#searchNext { 
    qproperty-icon: none; 
    image: url(":/light/icons/down_light.png"); 
} 

然後在我的懸停:

QPushButton#searchNext:hover { 
    image: url(":/dark/icons/down_dark.png"); 
} 

我仍然當我更改自定義屬性時需要self.ui.playButton.setStyle(qApp.style())代碼,但對於其他所有內容,此工作正常。

+2

這是改變背景圖像,而不是圖標。 – mrg95

1

設置qApp.style()不是一個好主意。試試這個(從C++轉換):

button->style()->unpolish(button); 
button->style()->polish(button); 
button->update(); 
+0

爲什麼設置'qApp.style()'是一個壞主意? –

+0

將應用程序範圍的樣式設置爲特定控件會浪費CPU和(可能)內存資源。 – DmitryARN