你可以用这样的样式表来做到这一点:
QProgressBar* bar = new QProgressBar();
bar->setStyleSheet("::chunk {"
"background-color: "
"qlineargradient(x0: 0, x2: 1, "
"stop: 0 green, stop: 0.6 green, "
"stop: 0.60001 orange, stop: 0.8 orange, "
"stop: 0.80001 red, stop: 1 red"
")}");
Run Code Online (Sandbox Code Playgroud)
它看起来像这样:

您可以简单地应用它使其更顺畅:
bar->setStyleSheet("::chunk {"
"background-color: "
"qlineargradient(x0: 0, x2: 1, "
"stop: 0 green, stop: 0.6 green, "
"stop: 0.8 orange, "
"stop: 1 red"
")}");
Run Code Online (Sandbox Code Playgroud)

这个解决方案是不正确的,因为值小于最大值,你会得到这样的东西:

正如其他人所指出的,这里是:QProgressBar 中块的梯度
唯一的解决方案似乎是自定义 paintEvent
为了完整起见,这里是自定义paintEvent的相关代码。这会起作用,但看起来不太好。此外,大多数参数应该是类成员并由用户设置。然而:
彩色进度条.h
#ifndef COLOREDPROGRESSBAR_H
#define COLOREDPROGRESSBAR_H
#include <QWidget>
#include <QProgressBar>
#include <QPaintEvent>
class ColoredProgressBar : public QProgressBar
{
Q_OBJECT
public:
explicit ColoredProgressBar(QWidget *parent = 0);
~ColoredProgressBar();
protected:
void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
signals:
public slots:
};
#endif // COLOREDPROGRESSBAR_H
Run Code Online (Sandbox Code Playgroud)
彩色进度条.cpp
#include "coloredprogressbar.h"
#include <QPainter>
#include <QBrush>
#include <QStyle>
#include <QPen>
#include <QColor>
ColoredProgressBar::ColoredProgressBar(QWidget *parent) : QProgressBar(parent)
{
}
ColoredProgressBar::~ColoredProgressBar()
{
}
void ColoredProgressBar::paintEvent(QPaintEvent*)
{
int val = value();
int pos = QStyle::sliderPositionFromValue(minimum(), maximum(), val, width());
int pos60 = QStyle::sliderPositionFromValue(minimum(), maximum(), 60, width());
int pos80 = QStyle::sliderPositionFromValue(minimum(), maximum(), 80, width());
QPainter p(this);
p.setPen(Qt::green);
p.setBrush(QBrush(Qt::green));
if(val >= 0 && val <= 60)
{
p.drawRect(0,0,pos,height());
}
else if(val > 60 && val <= 80)
{
p.drawRect(0,0,pos60,height());
p.setPen(QColor(255,127,0));
p.setBrush(QBrush(QColor(255,127,0)));
p.drawRect(pos60, 0, pos - pos60, height());
}
else
{
p.drawRect(0,0,pos60,height());
p.setPen(QColor(255,127,0));
p.setBrush(QBrush(QColor(255,127,0)));
p.drawRect(pos60, 0, pos80 - pos60,height());
p.setPen(Qt::red);
p.setBrush(QBrush(Qt::red));
p.drawRect(pos80, 0, pos - pos80, height());
}
p.setPen(Qt::lightGray);
p.setBrush(QBrush(Qt::lightGray));
p.drawRect(pos, 0, width(), height());
p.setPen(Qt::black);
p.setBrush(QBrush(Qt::black));
p.drawText(0,0, width(), height(), Qt::AlignCenter, QString::number(val) + "%");
}
Run Code Online (Sandbox Code Playgroud)
用法
#include <QApplication>
#include "coloredprogressbar.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ColoredProgressBar bar;
bar.setValue(85);
bar.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
我再说一遍,这只是一个简单的实现,看起来不太好并且缺少一些用户可设置的功能,但可以作为一个起点。随意编辑此代码。