我正在尝试支持我的应用程序的主题,我遇到了一个问题,我必须根据QPushButton的状态更改图标(默认,悬停,按下等)。这是我用来设置QPushButton图标的方法:
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
。
在我的Python代码中,播放按钮在播放时变为停止按钮,所以在我的风格中,我使用自定义属性将其设置为该图标:
QPushButton#playButton[isPlaying="true"] {
qproperty-icon: url(":/light/icons/stop_light.png");
}
这对我来说也不会改变。所以,我在网上发现了一些代码来重置按钮的样式,如下所示:
self.ui.playButton.setProperty('isPlaying', not isEnable)
self.ui.playButton.setStyle(qApp.style())
我不想对每个单个状态更改的每个单个按钮使用此解决方法。你们之前遇到过这个问题吗?
感谢您抽出时间看这个。
答案 0 :(得分:1)
设置qApp.style()并不是一个好主意。试试这个(从C ++转换):
button->style()->unpolish(button);
button->style()->polish(button);
button->update();
答案 1 :(得分: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())
代码,但对于其他所有内容,这都可以。