当值为16时,设置QProgressBar的样式



当值为16时,是否可以仅使用QSSQProgressBar进行样式设置?

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. 

这是不可能的。

唯一有效的扩展名在文档中,并且太长,无法在此处发布。

但是,您可以处理QProgressBarvalueChanged( int )信号并使用setStyleSheet( )相应地设置样式表,但我想您已经知道了。

相关内容

  • 没有找到相关文章

最新更新