更新窗口小部件的ObjectName不会自动更新样式

Jas*_*enX 8 qt qtstylesheets

在我的应用程序中,整个应用程序的样式表来自加载到应用程序中的资源文件.

我为QListWidget定义了两个样式表:

QListWidget#Good{
..some color properties
}

QListWidget#Bad {
..soem different color properties
}
Run Code Online (Sandbox Code Playgroud)

在一个表单中,我的QListWidget的Object名称是"Good",因此它遵循#good样式.在运行时,我有一个案例,我想"SetObjectName"它为"坏",并在UI中立即更改样式.

我注意到两件事:

  1. 只是调用"SetObjectName("Bad");" 不要改变方法的风格......
  2. 唯一一次"SetObjectName("Bad");" 如果从包含QListWidget的Widget的构造函数调用,则工作.

显然我错过了一些"更新风格"阶段.请注意,我不能在代码中使用"setStyleSheet",它必须来自QSS文件.

我错过了什么?

Jas*_*enX 12

得到了解决.呼叫:

style()->unpolish(theWidget);
style()->polish(theWidget);
Run Code Online (Sandbox Code Playgroud)

更改objectName(setObjectName)之后在我的小部件上完成了诀窍.