这是本文档旧的修订版!
有时候在代码中,需要根据某些情况下动态调整样式,但是有时候系统给出的属性如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->setText(tr("通过")); ui->label->style()->unpolish(ui->label); ui->label->setProperty("result", "passed"); ui->label->style()->polish(ui->label); }