27.QT-QProgressBar动态实现多彩进度条(详解)
2018-06-27 10:06:49来源:未知 阅读 ()
如下图所示:
效果如下:
(gif录制的动画效果不好,所以颜色有间隙)
介绍
通过qss实现,只需要一个多彩背景图,通过QImage获取颜色,然后来设置进度条,便可以实现动态多彩进度条(根据图片设定颜色)
其中,上面3个进度条就是通过以下3个图片实现的:
如果想实现其它颜色,只需要改图片即可
代码如下
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 = 0);
};
#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(100);
m_bar.setMinimum(0);
m_bar.setValue(0);
m_bar.setTextVisible(false);
m_bar.setFixedHeight(20);
m_slider.setMaximum(100);
m_slider.setMinimum(0);
m_slider.setValue(0);
m_slider.setOrientation(Qt::Horizontal);
m_value.setText(QString("%1%").arg(m_bar.value()));
m_value.setAlignment(Qt::AlignRight|Qt::AlignVCenter);
m_value.setMinimumWidth(40);
/*设置布局*/
QHBoxLayout* hlayout = new QHBoxLayout();
hlayout->addWidget(&m_slider);
hlayout->addWidget(&m_value,0,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=0;i<100;i++)
{
double Current = EndColor*i/100;
QRgb rgb = m_image.pixel((m_image.width()-1)*Current,m_image.height()/2);
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()));
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- opencv-12-高斯滤波-双边滤波(附C++代码实现) 2020-05-10
- 二叉排序树 2020-05-02
- 抽象宠物类的实现 代码参考 2020-04-29
- 虚函数实现多态性 代码参考 2020-04-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash