当前位置: 代码迷 >> QT开发 >> QT进度条根据百分比显示不同颜色解决方案
  详细解决方案

QT进度条根据百分比显示不同颜色解决方案

热度:92   发布时间:2016-04-25 04:57:56.0
QT进度条根据百分比显示不同颜色
请教一下各位怎么做出滑块在中间来回动的进度条。
  我想做一个根据进度百分比用不同颜色表示的功能,如1-30%显示红色,31-60%显示黄色61-100%显示绿色,麻烦各位指教,小弟初学QT。万分感谢

------解决方案--------------------
使用QSS来渲染。具体方法如下:

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

C/C++ code
ui->processBar->setStyleSheet("QProgressBar::chunk { background-color: rgb(255, 0, 0) }");
------解决方案--------------------
探讨

使用QSS来渲染。具体方法如下:

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

C/C++ code

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



关于QSS……

------解决方案--------------------
使用Qt 的styleSheet 可以实现:

用于计算比例:
C/C++ code
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;}
  相关解决方案