Стиль 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( )
но я думаю, ты уже знаешь это.