27.QT-QProgressBar动态实现多彩进度条(详解)

时间:2022-09-23 12:24:53

如下图所示:

27.QT-QProgressBar动态实现多彩进度条(详解)

效果如下:

27.QT-QProgressBar动态实现多彩进度条(详解)

(gif录制的动画效果不好,所以颜色有间隙)

介绍

通过qss实现,只需要一个多彩背景图,通过QImage获取颜色,然后来设置进度条,便可以实现动态多彩进度条(根据图片设定颜色)

其中,上面3个进度条就是通过以下3个图片实现的:

27.QT-QProgressBar动态实现多彩进度条(详解)

如果想实现其它颜色,只需要改图片即可

代码如下

ProgressBar.h:

#ifndef PROGRESSBAR_H
#define PROGRESSBAR_H
#include <QtGui> class ProgressBar : public QWidget
{
Q_OBJECT QProgressBar m_bar;
QLabel m_value;
QSlider m_slider;
QImage m_image; protected slots:
void onvalueChanged(int value);
public:
explicit ProgressBar(const QString& fileName,QWidget *parent = );
}; #endif // PROGRESSBAR_H

ProgressBar.cpp:

#include "ProgressBar.h"

ProgressBar:: ProgressBar(const QString&  fileName,QWidget *parent ) :
QWidget(parent),
m_bar(this),
m_value(this),
m_slider(this),
m_image(fileName)
{ m_bar.setMaximum();
m_bar.setMinimum();
m_bar.setValue();
m_bar.setTextVisible(false);
m_bar.setFixedHeight(); m_slider.setMaximum();
m_slider.setMinimum();
m_slider.setValue();
m_slider.setOrientation(Qt::Horizontal); m_value.setText(QString("%1%").arg(m_bar.value()));
m_value.setAlignment(Qt::AlignRight|Qt::AlignVCenter);
m_value.setMinimumWidth();
/*设置布局*/
QHBoxLayout* hlayout = new QHBoxLayout();
hlayout->addWidget(&m_slider);
hlayout->addWidget(&m_value,,Qt::AlignRight); QVBoxLayout* vlayout = new QVBoxLayout(); vlayout->addWidget(&m_bar);
vlayout->addLayout(hlayout);
setLayout(vlayout); connect(&m_slider,SIGNAL(valueChanged ( int)),&m_bar,SLOT(setValue (int)));
connect(&m_bar,SIGNAL(valueChanged ( int)),this,SLOT(onvalueChanged (int))); onvalueChanged(m_bar.value());
}
void ProgressBar::onvalueChanged(int value)
{
QString qss= "QProgressBar{"
"border: 1px solid rgb(16, 135, 209);"
"background: rgba(248,248,255,180);"
"border-radius: 6px; }"
"QProgressBar::chunk:enabled {"
"border-radius: 4px; "
"background: qlineargradient(x1:0, y1:0, x2:1, y2:0" ; double v = m_bar.maximum();
double EndColor=static_cast<double>(value)/v ; //获取比例 for(int i=;i<;i++)
{
double Current = EndColor*i/;
QRgb rgb = m_image.pixel((m_image.width()-)*Current,m_image.height()/);
QColor c(rgb);
qss.append(QString(",stop:%1 rgb(%2,%3,%4)").arg(i/100.0).arg(c.red()).arg(c.green()).arg(c.blue()));
} qss.append(");}");
m_bar.setStyleSheet(qss);
m_value.setText(QString("%1%").arg(m_bar.value()));
}

27.QT-QProgressBar动态实现多彩进度条(详解)的更多相关文章

  1. 两种CSS3圆环进度条详解

    晚上睡觉之前,我抽了1个多小时,研究了一下圆环进度条,结合从网上查阅的资料,我终于掌握了两种圆环的生成方法. 这次的效果就是单纯的CSS3效果,也没有写具体的JS,等以后有时间在好好整理一下吧~. 第 ...

  2. Bootstrap 各种进度条详解

    一:默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 <div> 内,添加一个带有 class . ...

  3. Qt的Graphics-View框架和OpenGL结合详解

    Qt的Graphics-View框架和OpenGL结合详解 演示程序下载地址:这里 程序源代码下载地址:这里 这是一篇纯技术文,介绍了这一个月来我抽时间研究的成果. Qt中有一个非常炫的例子:Boxe ...

  4. 数据结构与算法系列2 线性表 使用java实现动态数组&plus;ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  5. Qt之QRoundProgressBar(圆形进度条)

    简述 QRoundProgressBar类能够实现一个圆形进度条,继承自QWidget,并且有和QProgressBar类似的API接口. 简述 详细说明 风格 颜色 字体 共有函数 共有槽函数 详细 ...

  6. Qt编写自定义控件72-提示进度条

    一.前言 我们在很多的安装包中,在安装过程中,经常可以在底部看到一个漂亮的进度条,上面悬浮着显示对应的进度,然后底部进度多种颜色渐变展示,Qt自带的进度条或者操作系统的进度条样式,不够炫,这次索性直接 ...

  7. Qt编写自定义控件71-圆弧进度条

    一.前言 现在web形式的图表框架非常流行,国产代表就是echart,本人用过几次,三个字*了来形容,非常强大,而且易用性也非常棒,还是开源免费的,使用起来不要太爽,内置的各种图表和仪表盘等非常丰富 ...

  8. Qt编写自定义控件40-导航进度条

    一.前言 导航进度条控件,其实就是支付宝.京东.淘宝订单页面的进度控件,提示当前第几步,总共有几步,然后当前进度特殊颜色显示,每个进度带有时间文字等信息,本控件特意将三种样式风格都集成进去了,京东订单 ...

  9. Qt编写自定义控件32-等待进度条控件

    一.前言 在各种各样的执行任务界面,有时候需要比较多的时间,需要给出一个直观的等待进度条表示当前正在执行的进度,而不至于懵逼在那里,用户不会觉得程序死了还是干嘛了. 等待进度条有好几种办法,比如直接叫 ...

随机推荐

  1. JS 之性能优化&lpar;2&rpar;

    继续上一篇的JS性能优化之后,下面接着讲关于前端性能优化的内容.如果有不对的地方欢迎纠正. 1.避免过多的重排与重绘操作. 尽量将DOM中的多个读操作放一起,中间不要插入写的操作,因为写操作会导致浏览 ...

  2. 拷贝数据库和VS项目

    2个项目的相似度比较大,在另一个的基础上做修改,不想从头再来,把数据库和项目如何克隆一份呢? 数据库复制:(SQLSERVER2008) 任务-备份数据库 然后还原到新建的数据库名下即可 VS项目复制 ...

  3. Linux 修改hostname 文件

    linux 的机器修改hostname: 修改 /etc/hosts 修改 /etc/sysconfig/network 重启机器reboot

  4. QQ拼音还是不行哇

    QQ拼音还是不行啊,虽说没广告,但是很多词条没有,例如知乎.蒋京虎. 泰囧……

  5. 获取contenteditable的内容 对html进行处理 兼容 chrome、IE、Firefox

    var html = $(this).html();if(html){ var lineSign = html.indexOf('<div>'); if(html.indexOf('&lt ...

  6. mysql的数据类型int、bigint、smallint 和 tinyint取值范围

    使用整数数据的精确数字数据类型.   bigint   从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字 ...

  7. TCP基础知识 复习

    前言 说来惭愧,大二时候学的计算机网络好多都不太记得了,不过还好有认真学过,捡起来也挺快的,就是对于现在业界中使用的网络算法的不是很懂: 1 TCP报文段结构 1.1 序号和确认号 序号,是报文段首字 ...

  8. 学JAVA第七天,循环深入了解

    因为星期五放假,所以今天补回. 上次已经解释过循环了,现在我们来进一步了解. 例如for循环:for( int i=0 : i<10 : i++ ){需要循环的内容},这样就会循环10次了 如果 ...

  9. NetStream论文

    https://max.book118.com/html/2016/0102/32573670.shtm http://www.docin.com/p-1568348795.html

  10. JSP&plus;MySQL实例

    转自:https://www.yiibai.com/jsp/jsp_mysql.html 在本章中,我们将讨论如何使用JSP访问数据库(这里以MySQL数据库为例).并假设您对JDBC应用程序的工作方 ...