Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Updating ObjectName of widget does not not update the style automatically

In my application, the stylesheet for the entire application is taken from a resource file loaded into the application.

I have two stylesheets defined there for a QListWidget:

QListWidget#Good{
..some color properties
}

QListWidget#Bad {
..soem different color properties
}

In a form, my QListWidget's Object name is "Good", so it adheres to the #good style. During runtime, I have a case where I want to "SetObjectName" it to "Bad" and have the style changed instantly in the UI.

I have noticed two things:

  1. merely calling "SetObjectName("Bad");" doens't change the style from methods...
  2. The only time "SetObjectName("Bad");" works is if called from the constructor of the Widget containing the QListWidget.

Obviously i am missing some "update style" phase. Note that I cannot have "setStyleSheet" in code, it must come from the QSS file.

What am I missing?

like image 962
JasonGenX Avatar asked Jan 30 '12 15:01

JasonGenX


1 Answers

Got this resolved. Calling:

style()->unpolish(theWidget);
style()->polish(theWidget);

On my widget after the change of objectName (setObjectName) did the trick.

like image 57
JasonGenX Avatar answered Sep 23 '22 03:09

JasonGenX