QT进度条依据百分比显示不同颜色

QT进度条根据百分比显示不同颜色
请教一下各位怎么做出滑块在中间来回动的进度条。
  我想做一个根据进度百分比用不同颜色表示的功能,如1-30%显示红色,31-60%显示黄色61-100%显示绿色,麻烦各位指教,小弟初学QT。万分感谢
------解决思路----------------------
使用QSS来渲染。具体方法如下:

连接valueChanged到一个槽,根据当前进度值调用QProcessBar的setStyleSheet方法,类似这样:


ui->processBar->setStyleSheet("QProgressBar::chunk { background-color: rgb(255, 0, 0) }");


关于QSS,请参考官方文档:Qt Style Sheets

关于QProcessBar的相关QSS渲染,请参考:Customizing QProgressBar
------解决思路----------------------
引用:
使用QSS来渲染。具体方法如下:

连接valueChanged到一个槽,根据当前进度值调用QProcessBar的setStyleSheet方法,类似这样:

C/C++ code

ui->processBar->setStyleSheet("QProgressBar::chunk { background-color: rgb(255, 0, 0) }");



关于QSS……

我估计楼主是要一个花的进度条,不同颜色组合在一起。
------解决思路----------------------
使用Qt 的styleSheet 可以实现:

用于计算比例:

QString CMainWidget::calcValue(int nValue,int nTotal)
{
QString strStyle = "";
int value1 = nTotal * 0.3 + 0.5;
if (nValue > value1)
{
QString str1;
QString str2;
float scale1 = (float)value1 / (float)nValue;
float scale2 = scale1 + 0.000004;
str1 = str1.setNum(scale1,'f',6);
str2 = str2.setNum(scale2,'f',6);

if (nValue > (value1 + value2))
{
QString str3;
QString str4;

float scale3 = 2.0 * scale1;
float scale4 = scale3 + 0.000004;
str3 = str3.setNum(scale3,'f',6);
str4 = str4.setNum(scale4,'f',6);
qDebug() << str3 << str4;
strStyle = QString("qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, \
   stop:0 rgba(255, 0, 0, 255), stop:%1 rgba(255, 0, 0, 255), \
   stop:%2 rgba(255, 255, 0, 255), stop:%3 rgba(255, 255, 0, 255) \
   stop:%4 rgba(0, 0, 255, 255), stop:1 rgba(0, 0, 255, 255))")
.arg(str1)
.arg(str2)
.arg(str3)
.arg(str4);
}
else
{
strStyle = QString("qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255, 0, 0, 255), stop:%1 rgba(255, 0, 0, 255), stop:%2 rgba(255, 255, 0, 255), stop:1 rgba(255, 255, 0, 255))")
.arg(str1)
.arg(str2);
}
}
else
{
strStyle = "rgba(255, 0, 0, 255)";
}
return strStyle;
}

处理SLOT的槽:

void CMainWidget::slt_valueChanged(int value)
{
m_progressbar->setValue(value);
m_progressbar->setStyleSheet(QString(""
" QProgressBar {"
" border: 2px solid grey;"
" border-radius: 5px;"
""
"}"

"QProgressBar::chunk {"
" background-color: "
"%1;"
"}").arg(calcValue(value,m_progressbar->maximum())));
}