如何根据QProgressBar的值更改文本颜色?

10

我不知道如何在进度条的值接近50%时部分更改文本颜色。这个效果在融合风格的进度条中会自动生成(如下图所示)。有人知道这是如何实现的吗?

融合风格进度条


您在提供的链接中描述的实现方案中遇到了哪些问题? - Dmitry Sazonov
1
所以你建议别人替你编写代码?样式表对你没什么帮助。学习Qt的基础知识是个好主意。 - Dmitry Sazonov
问题是什么?谁确切地知道它是如何完成的。很可能是编写Fusion样式的人。但是,想知道什么? - Greenflow
4个回答

9

我不知道如何制作这样的两种颜色的文本,所以我查看了:

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

在我看来,实现这一点最好且可能最简单的方法是更改QProgressBar小部件的调色板:

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

1

"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
您可以在容器 Widget 上使用样式表:
myMainWidget.setStyleSheet(QString("QProgressBar {color: red}"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接