使用样式表,Qt的动态属性真的如此动态吗?
我有样式表和动态属性的基本示例:
/*stylesheet:*/
*[field_mandatory="true"] { background-color: "yellow";}
我在代码中的某个地方发生了这种情况:
/*code:*/
myWidget->setProperty("field_mandatory", field->isFilled() );
在运行时更改此属性时,UI中没有任何更改。
有没有人有想法在更改属性时更新Qt的样式表引擎必须做些什么,或者它是否能够处理这些情况?
顺便说一下。我正在使用Qt 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的值 样式表后属性更改 已经设定,可能有必要 强制样式表重新计算。一 实现这一目标的方法是取消 样式表并重新设置。