如何用它的值改变QProgressBar文本的颜色?

时间:2013-08-01 07:15:50

标签: c++ qt progress-bar

当它的值接近50%时,我不知道如何在进度条中部分更改文本的颜色。此效果自动出现在融合样式进度条中(下图)。有谁知道这是怎么做的?

Fusion style progress bar

4 个答案:

答案 0 :(得分:8)

编写工作示例代码太懒了,更不用说制作截图了。甚至没有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));
    }

基本上,文本在同一个矩形中绘制两次。每次都有适当的剪裁。如果你知道如何容易。 : - )

答案 1 :(得分:0)

从我的观点来看,最好的,也许是最简单的方法是更改​​QProgressBar小部件的托盘:

    QPalette palette = progressBar->palette()
    palette.setColor(QPalette::Text, textColor)
    palette.setColor(QPalette::HighlightedText, textColor)
    progressBar->setPalette(palette)

答案 2 :(得分:0)

“ setBackgroundRole方法允许您为背景使用颜色角色,这意味着应用于窗口小部件的样式的预定义颜色之一。因此,您基本上只限于样式及其颜色。”

enter image description here

背景解决方案:

    value = 65
    self.progressBar.setProperty("value", value)

    if value < 50:
        self.progressBar.setStyleSheet("QProgressBar::chunk { background-color: black; }")
    else:
        self.progressBar.setStyleSheet("QProgressBar::chunk { background-color: black; } QProgressBar { color: white; }")

答案 3 :(得分:-3)

您可以在Container Widget上使用样式表:

myMainWidget.setStyleSheet(QString("QProgressBar {color: red}"));