9

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

融合风格进度条

4

4 回答 4

9

懒得写工作示例代码,更不用说截图了。甚至 50 次也不行。:-)

不过,这个问题有点意思。我不知道如何完成这样的两种颜色的文本。所以我检查了:http: //qt.gitorious.org/qt/qtbase/blobs/stable/src/widgets/styles/qfusionstyle.cpp Line 1450ff(http://qt.gitorious.org/qt/qtbase/blobs/稳定/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));
    }

基本上,文本被两次绘制到同一个矩形中。每次都有适当的剪辑。如果你知道怎么做就容易了。:-)

于 2013-08-11T21:02:09.257 回答
1

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

在此处输入图像描述

后台解决方案:

    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; }")
于 2020-03-08T18:21:50.030 回答
1

从我的角度来看,最好的,也可能是最简单的方法是更改​​ QProgressBar 小部件的托盘:

    QPalette palette = progressBar->palette()
    palette.setColor(QPalette::Text, textColor)
    palette.setColor(QPalette::HighlightedText, textColor)
    progressBar->setPalette(palette)
于 2018-03-01T07:11:44.400 回答
-3

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

myMainWidget.setStyleSheet(QString("QProgressBar {color: red}"));
于 2013-08-02T00:17:16.650 回答