当值为16
时,是否可以仅使用QSS
对QProgressBar
进行样式设置?
ui->progresso->setValue(16);
使用这样的QSS:
QProgressBar {
//Default QSS
...
}
QProgressBar:value(16) {
background-color: #fc0;
}
我的目标是:-当QProgressBar
为0时:将使用background-color: transparent
-当QProgressBar
大于0时:显示灰色条,"chunk"将为蓝色-当QProgressBar
大于89时:以红色显示"区块"。
我可以用QT + C++
来做这件事,但我想知道是否只有用QSS
才能做到这一点?
像这样(这个代码不存在,只是一个例子):
QProgressBar {
background-color: gray;
}
QProgressBar:value(0) {
background-color: transparent;
}
QProgressBar::chunk {
background-color: blue;
}
QProgressBar::chunk:minValue(90) {
background-color: red;
}
我认为在属性选择器的帮助下这是可能的,但仅适用于exect值,即:
QProgressBar[value = 16]::chunk{
background-color: red;
}
但你可以为每个值生成这样的代码
QString styleSheet;
for(int i = 0; i < 101; i++)
{
styleSheet.append(QString("QProgressBar[value = "%1"]::chunk{background-color: %2;}").arg(QString::number(i), (i < 17 ? "red" :"blue")));
}
myProgressBar->setStyleSheet(styleSheet);
我不尝试。这只是一个基于文档的理论
更新1
Warning: If the value of the Qt property changes after the style sheet has been set, it might be necessary to force a style sheet recomputation. One way to achieve this is to unset the style sheet and set it again.
这是不可能的。
唯一有效的扩展名在文档中,并且太长,无法在此处发布。
但是,您可以处理QProgressBar
的valueChanged( int )
信号并使用setStyleSheet( )
相应地设置样式表,但我想您已经知道了。