Qt的样式表真的处理_dynamic_属性吗?

时间:2009-10-20 15:28:41

标签: qt stylesheet

使用样式表,Qt的动态属性真的如此动态吗?

我有样式表和动态属性的基本示例:

/*stylesheet:*/
*[field_mandatory="true"] { background-color: "yellow";}

我在代码中的某个地方发生了这种情况:

/*code:*/
myWidget->setProperty("field_mandatory", field->isFilled() );

在运行时更改此属性时,UI中没有任何更改。

有没有人有想法在更改属​​性时更新Qt的样式表引擎必须做些什么,或者它是否能够处理这些情况?

顺便说一下。我正在使用Qt 4.4

4 个答案:

答案 0 :(得分:20)

Qt在FAQ中有以下建议:

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

他们还说你可以通过执行以下操作来重置样式表,但它更昂贵:

setStyleSheet(styleSheet());

答案 1 :(得分:6)

我发现了一种快速(虽然有点hackish)更新小部件样式的方法。

myWidget->style()->unpolish(myWidget);
myWidget->ensurePolished();

更改属性后执行此操作可保持属性数据与UI之间的关联。

答案 2 :(得分:3)

以下内容适用于我,以确保正确重新设置窗口小部件:

myWidget->setStyle(QApplication::style())

强制重新计算mdcl提出的样式表对我来说不起作用。我使用的是Qt 4.5.3。

答案 3 :(得分:2)

我也试过这个没有运气,当我在文档中找到以下文字时,我放弃了。见The Style Sheet Syntax

  

警告:如果是Qt的值   样式表后属性更改   已经设定,可能有必要   强制样式表重新计算。一   实现这一目标的方法是取消   样式表并重新设置。