Стиль QProgressBar, когда значение равно 16

Можно стилизовать QProgressBar используя только QSS когда значение 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;
}

2 ответа

Я думаю, что это возможно с помощью Property Selector, но только для значений, т.е.

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. 

Это невозможно.

Единственные допустимые расширения находятся в документации и слишком долго, чтобы публиковать здесь.

Однако вы могли бы справиться с valueChanged( int ) сигнал о QProgressBarи установите таблицу стилей соответственно, используя setStyleSheet( ) но я думаю, ты уже знаешь это.

Другие вопросы по тегам