2013-12-13 108 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