这是本文档旧的修订版!
此条目的demo代码: QssDynamicProperty.zip
有时候在代码中,需要根据某些情况下动态调整样式,但是有时候系统给出的属性如checked
、unchecked
已经不足以我们使用时,这个时候就可以用到动态属性的方式去实现我们要的效果。
例如,我现在除了常规状态外,另有三种状态,分别是passed
、warning
、failed
,
然后这四种状态分别有不同的背景颜色,这个时候可以通过在 类名 #控件名
后加 [自定义属性名=属性值]
的方式来实现。
比如属性名为result
Widget #label { border: 2px solid black; } Widget #label[result=passed] { background-color: green; } Widget #label[result=warning] { background-color: yellow; } Widget #label[result=failed] { background-color: red; }
上面定义了4种状态,其中常规状态#label后不加动态属性即可。
然后当我们要切换状态时,调用setProperty()即可,如:
void Widget::on_pushButton_passed_clicked() { ui->label->style()->unpolish(ui->label); ui->label->setProperty("result", "passed"); ui->label->style()->polish(ui->label); }
如果是设置为常规状态,即没有属性的初始状态,则值设置为QVariant()
,如:
ui->label->setProperty("result", QVariant());
另外,你可能注意到了,在更改样式的时候,调用了unpolish()
和polish()
,这是为了先取消旧的样式,再润饰新的样式,不然样式不会生效。