How to force a style sheet recalculation
-
genjix, for hovering or clicking on a button there are pseudo-states in stylesheets.
-
Just for reference:
"http://developer.qt.nokia.com/faq/answer/how_can_my_stylesheet_account_for_custom_properties":http://developer.qt.nokia.com/faq/answer/how_can_my_stylesheet_account_for_custom_properties.Here it is indicated that using a unpolish()/polish() pair of calls would be the fastest way to force the update.
-
When first being classified as "a sensible idea" and asking for more info, the JIRA ticket has now been closed as "Out of scope" because Qt is "more focussed on QML than in widgets" now.
I read in that: f*ck everybody who invested hundreds or thousands of developer hours into widget based applications; everybody who is not immediately jumping onto the immature Quick bandwagon is screwed.
I am really disapointed by this. While I see Quick as a very interesting technology for creating flashy touch UI's, conventional widgets have a huge invested base and do have their advantages. At least it is proven technology. I would have expected to see them live on side by side for quite a while, as there are use cases for both stacks. It seems I was wrong. :-(
-
Coming here after googling, just a quick reply:
meanwhile, QStyle.polish() seems to apply the recomputed style on the change widget.
-
IIRC, calling buton->setStyleSheet("/* /"); should be enough to clear the caches for this widget and force a recomputation of the style.
(Notice "/ */" and not "" in order to avoid an empty stylesheet that would be ignored)@ogoffart you're my hero, I had discovered a weird effect on Qt6.9.1 (and later also on some older Qt6 versions), sending an empty or invalid string to setStyleSheet() didn't always clear the previously set stylesheet, but your proposed solution perfectly works, always! Thanks man!
-
The solution from @ogoffart works for me, too.
setStyleSheet() in >6.9.1 doesn't work for me to refresh the stylesheet. I use widget.setStyleSheet(widget.styleSheet()), but that isn't reliable. @WolfgangGriech also describes this.
Perhaps this should be reported as bug?It's been reported and fixed for 6.10. -
The solution from @ogoffart works for me, too.
setStyleSheet() in >6.9.1 doesn't work for me to refresh the stylesheet. I use widget.setStyleSheet(widget.styleSheet()), but that isn't reliable. @WolfgangGriech also describes this.
Perhaps this should be reported as bug?It's been reported and fixed for 6.10.@larsmaxfield
FWIW, (I believe) I recall in some Qt 5 version years ago in order to get it reliably to count as a change I had to/ended up doing:temp = widget.styleSheet(); widget.setStyleSheet(""); widget.setStyleSheet(temp);
-
@larsmaxfield
FWIW, (I believe) I recall in some Qt 5 version years ago in order to get it reliably to count as a change I had to/ended up doing:temp = widget.styleSheet(); widget.setStyleSheet(""); widget.setStyleSheet(temp);
Maybe even
That might force the style(sheet) to update too.
But usually the widget should do this when a new style(sheet) is applied.