Change icon on state change using Qt stylesheet

╄→尐↘猪︶ㄣ 提交于 2019-12-02 12:22:49

问题


I'm trying to support theming for my application, and I'm coming across a problem where I have to change icons based on the state of the QPushButton (default, hover, pressed, etc.). Here is what I use to set the icon for a QPushButton:

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

Because the hover state uses a background that requires an icon from my dark theme, I tried to change it to the other using this:

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

When I do this, the play_light.png displays as it should, but it doesn't change to play_dark.png on state change.

In my Python code, the play button changes to a stop button on playback, so in my style, I set it to that icon using a custom property:

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

This wouldn't change for me either. So, I found some code online to reset the style for the button, which looks like this:

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

I don't want to use this workaround for every single button for every single state change. Have you guys ran into this problem before?

Thanks for your time looking at this.


回答1:


Setting qApp.style() is not a good idea. Try this (convert from C++):

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



回答2:


Figured it out. I kept the icons on my form so that I knew which icons went to which one, but in my stylesheet, I did something like this:

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

Then on my hover:

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

I still needed the self.ui.playButton.setStyle(qApp.style()) code when I change a custom property, but for everything else, this works fine.



来源:https://stackoverflow.com/questions/20573944/change-icon-on-state-change-using-qt-stylesheet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!