知识库

wiki.linsakura.com

用户工具

站点工具


wiki:dev:qt:note:qss_dynamic_property

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
wiki:dev:qt:note:qss_dynamic_property [2024/05/13 11:07]
博丽幻月 创建
wiki:dev:qt:note:qss_dynamic_property [2024/05/13 11:19] (当前版本)
博丽幻月
行 1: 行 1:
 ====== Qt QSS 动态属性 ====== ====== Qt QSS 动态属性 ======
 +此条目的demo代码:{{ :wiki:dev:qt:note:qssdynamicproperty.zip | QssDynamicProperty.zip}}\\
 +\\
 有时候在代码中,需要根据某些情况下动态调整样式,但是有时候系统给出的属性如''checked''、''unchecked''已经不足以我们使用时,这个时候就可以用到动态属性的方式去实现我们要的效果。\\ 有时候在代码中,需要根据某些情况下动态调整样式,但是有时候系统给出的属性如''checked''、''unchecked''已经不足以我们使用时,这个时候就可以用到动态属性的方式去实现我们要的效果。\\
 例如,我现在除了常规状态外,另有三种状态,分别是''passed''、''warning''、''failed'',\\ 例如,我现在除了常规状态外,另有三种状态,分别是''passed''、''warning''、''failed'',\\
-然后这四种状态分别有不同的背景颜色,这个时候可以通过在 类名 #控件名 后加 [自定义属性名=属性值] 的方式来实现。\\+然后这四种状态分别有不同的背景颜色,这个时候可以通过在 ''类名 #控件名'' 后加 ''[自定义属性名=属性值]'' 的方式来实现。\\ 
 +比如属性名为''result''\\ 
 +<code css> 
 +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; 
 +
 +</code> 
 +上面定义了4种状态,其中常规状态#label后不加动态属性即可。\\ 
 +然后当我们要切换状态时,调用setProperty()即可,如:\\ 
 +<code cpp> 
 +void Widget::on_pushButton_passed_clicked() 
 +
 +    ui->label->style()->unpolish(ui->label); 
 +    ui->label->setProperty("result", "passed"); 
 +    ui->label->style()->polish(ui->label); 
 +
 +</code> 
 +如果是设置为常规状态,即没有属性的初始状态,则值设置为''QVariant()'',如:\\ 
 +<code cpp> 
 +ui->label->setProperty("result", QVariant()); 
 +</code> 
 +另外,你可能注意到了,在更改样式的时候,调用了''unpolish()''和''polish()'',这是为了先取消旧的样式,再润饰新的样式,不然样式不会生效。\\
wiki/dev/qt/note/qss_dynamic_property.1715569668.txt.gz · 最后更改: 2024/05/13 11:07 由 博丽幻月