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

ZLingjun 2012-03-14 09:55:07
请教一下各位怎么做出滑块在中间来回动的进度条。
我想做一个根据进度百分比用不同颜色表示的功能,如1-30%显示红色,31-60%显示黄色61-100%显示绿色,麻烦各位指教,小弟初学QT。万分感谢
...全文
3416 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQ_278397935 2014-12-01
  • 打赏
  • 举报
回复
都是 神话一样的人物啊,见识了。
ZLingjun 2012-03-18
  • 打赏
  • 举报
回复
差不多效果了。再次感谢
SunFrank1987 2012-03-16
  • 打赏
  • 举报
回复


你要的是这种效果吗?
ZLingjun 2012-03-15
  • 打赏
  • 举报
回复
ak47zhangzhiwei
你好,你的程序我试了,value值在31-90之间与100等值运行效果显示图好像有问题,你检查下,对于你这程序我没看太明白。再次谢谢
ZLingjun 2012-03-15
  • 打赏
  • 举报
回复
谢谢各位,我要实现根据不同进度显示不同进度段的颜色,我再试试,这里面没怎么提问过,回复慢了请见谅
SunFrank1987 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ak47zhangzhiwei 的回复:]

使用Qt 的styleSheet 可以实现:

用于计算比例:
C/C++ code

QString CMainWidget::calcValue(int nValue,int nTotal)
{
QString strStyle = "";
int value1 = nTotal * 0.3 + 0.5;
if (nValue > value1)
{
……
[/Quote]
value2 未定义 直接改为 2 * value1
SunFrank1987 2012-03-14
  • 打赏
  • 举报
回复
使用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())));
}
xiachm 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jdwx1 的回复:]

引用 1 楼 xiachm 的回复:

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

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

C/C++ code

ui->processBar->setStyleSheet("QProgressBar::chunk { background-color: rgb(255……
[/Quote]
那考虑用QSS里的渐变来试一下,但我没试过,不确定能做到什么程度。

另外,关于“怎么做出滑块在中间来回动的进度条”这个问题,把minimum和maximum都设为0,那滑块就会来回动了。
jdwx 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiachm 的回复:]

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

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

C/C++ code

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



关于QSS……
[/Quote]
我估计楼主是要一个花的进度条,不同颜色组合在一起。
xiachm 2012-03-14
  • 打赏
  • 举报
回复
使用QSS来渲染。具体方法如下:

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


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


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

关于QProcessBar的相关QSS渲染,请参考:Customizing QProgressBar

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧