Cambie el icono en el cambio de estado usando la hoja de estilo Qt

Estoy tratando de dar soporte a la temática de mi aplicación, y me encuentro con un problema en el que tengo que cambiar los íconos según el estado del QPushButton (predeterminado, hover, presionado, etc.). Aquí está lo que uso para configurar el ícono de un QPushButton:

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

Debido a que el estado de desplazamiento del mouse utiliza un fondo que requiere un ícono de mi tema oscuro, intenté cambiarlo por el otro usando esto:

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

Cuando hago esto, play_light.png muestra como debería, pero no cambia a play_dark.png en cambio de estado.

En mi código de Python, el botón de reproducción cambia a un botón de parada en la reproducción, así que en mi estilo, lo configuro en ese icono usando una propiedad personalizada:

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

Esto tampoco cambiaría para mí. Entonces, encontré un código en línea para restablecer el estilo del botón, que se parece a esto:

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

No quiero usar esta solución para cada botón individual para cada cambio de estado. ¿Se han encontrado con este problema antes?

Gracias por su tiempo mirando esto.

Configurar qApp.style () no es una buena idea. Prueba esto (convierte de C ++):

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

Lo averigué. Mantuve los icons en mi formulario para saber qué icons iban a cuál, pero en mi hoja de estilos, hice algo como esto:

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

Entonces en mi vuelo

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

Todavía necesitaba el self.ui.playButton.setStyle(qApp.style()) cuando cambio una propiedad personalizada, pero para todo lo demás, esto funciona bien.