0

QProgressBarQSS当值为16示例时才可以设置使用样式?

ui->progresso->setValue(16);

使用这样的 QSS:

QProgressBar {
    //Default QSS
    ...
}

QProgressBar:value(16) {
    background-color: #fc0;
}

我的目标是: - 当QProgressBar为 0 时:它将使用background-color: transparent - 当QProgressBar大于 0 时:显示灰色条,“块”将为蓝色 - 当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;
}
4

2 回答 2

1

我认为在 Property Selector 的帮助下是可能的,但仅适用于 exect 值,即:

QProgressBar[value = 16]::chunk{
    background-color: red;
}

但是您可以在代码中为每个值生成这样的 stilesheet

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. 
于 2015-04-08T05:58:19.420 回答
0

这是不可能的。

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

但是,您可以处理valueChanged( int )信号QProgressBar 并相应地设置样式表,setStyleSheet( )但我认为您已经知道这一点。

于 2015-04-07T20:36:10.400 回答