Как изменить цвет текста QProgressBar с его значением?
Я не знаю, как изменить цвет текста частично в прогресс-бар, когда его значение будет около 50%. Этот эффект происходит автоматически в прогресс-баре fusion style (рисунок ниже). Кто-нибудь знает как это делается ?
3 ответов
слишком ленив, чтобы написать рабочий пример кода, а тем более сделать скриншот. Даже для 50 повторений. : -)
однако вопрос был несколько интересным. Я понятия не имел, как можно сделать такой двухцветный текст. Поэтому я проверил: http://qt.gitorious.org/qt/qtbase/blobs/stable/src/widgets/styles/qfusionstyle.cpp Линия 1450ff (http://qt.gitorious.org/qt/qtbase/blobs/stable/src/widgets/styles/qfusionstyle.cpp#line1450).
QRegion rightRect = rect;
rightRect = rightRect.subtracted(leftRect);
painter->setClipRegion(rightRect);
painter->setPen(flip ? alternateTextColor : textColor);
painter->drawText(rect,
bar->text,
QTextOption(Qt::AlignAbsolute|
Qt::AlignHCenter|
Qt::AlignVCenter));
if (!leftRect.isNull())
{
painter->setPen(flip ? textColor : alternateTextColor);
painter->setClipRect(leftRect);
painter->drawText(rect,
bar->text,
QTextOption(Qt::AlignAbsolute|
Qt::AlignHCenter|
Qt::AlignVCenter));
}
в основном тексте рисуется два раза в один и тот же прямоугольник. Каждый раз с соответствующей вырезкой. Легко, если знаешь как. :-)
С моей точки зрения, лучший и, вероятно, самый простой способ сделать это-изменить поддон для виджета QProgressBar:
QPalette palette = progressBar->palette()
palette.setColor(QPalette::Text, textColor)
palette.setColor(QPalette::HighlightedText, textColor)
progressBar->setPalette(palette)
вы можете использовать таблицу стилей в контейнер :
myMainWidget.setStyleSheet(QString("QProgressBar {color: red}"));