我们在很多的安装包中,在安装过程中,经常可以在底部看到一个漂亮的进度条,上面悬浮着显示对应的进度,然后底部进度多种颜色渐变展示,qt自带的进度条或者操作系统的进度条样式,不够炫,这次索性直接来个自定义绘制实现,至于是继承qwidget类还是qprogressbar类,都无所谓,如果是继承自qwidget类的话,就需要自己设置最大值最小值范围值,而继承自qprogressbar的话就可以直接用自带的函数来实现。这次编写的进度条,提示信息的背景色也是和下面的进度颜色完全一致跟着变化的。
1:可设置最小值/最大值/范围值/当前值
2:可设置是否百分比显示
3:可设置边距,流出空隙防止提示信息跑到外面
4:可设置进度的颜色,可以是渐变画刷
5:可设置背景颜色/文字颜色/提示背景
6:可设置圆角角度
7:如果设置了进度画刷则提示背景也采用该画刷
#ifndef progresstip_h#define progresstip_h/** * 提示进度条控件 作者:feiyangqingyun(qq:517216493) 2019-10-05 * 1:可设置最小值/最大值/范围值/当前值 * 2:可设置是否百分比显示 * 3:可设置边距,流出空隙防止提示信息跑到外面 * 4:可设置进度的颜色,可以是渐变画刷 * 5:可设置背景颜色/文字颜色/提示背景 * 6:可设置圆角角度 * 7:如果设置了进度画刷则提示背景也采用该画刷 */#include <qwidget>#ifdef quc#if (qt_version < qt_version_check(5,7,0))#include <qtdesigner/qdesignerexportwidget>#el#include <qtuiplugin/qdesignerexportwidget>#endifclass qdesigner_widget_export progresstip : public qwidget#elclass progresstip : public qwidget#endif{ q_object q_property(double minvalue read getminvalue write tminvalue) q_property(double maxvalue read getmaxvalue write tmaxvalue) q_property(double value read getvalue write tvalue) q_property(bool percent read getpercent write tpercent) q_property(int padding read getpadding write tpadding) q_property(int radius read getradius write tradius) q_property(qbrush valuebrush read getvaluebrush write tvaluebrush) q_property(qcolor valuecolor read getvaluecolor write tvaluecolor) q_property(qcolor bgcolor read getbgcolor write tbgcolor) q_property(qcolor tipcolor read gettipcolor write ttipcolor) q_property(qcolor textcolor read gettextcolor write ttextcolor)public: explicit progresstip(qwidget *parent = 0);protected: void paintevent(qpaintevent *); void drawbg(qpainter *painter); void drawtip(qpainter *painter); void drawvalue(qpainter *painter);private: double minvalue; //万芳好听的歌最小值 double maxvalue; //最大值 double value; //目标值 bool percent; //百分比显示 int padding; //边距 int radius; //圆角角度 qbrush valuebrush; //进度画刷 qcolor valuecolor; //进度颜色 qcolor bgcolor; //背景颜色 qcolor tipcolor; //提示背景颜色 qcolor textcolor; //文字颜色public: double getminvalue() const; double getmaxvalue() const; double getvalue() const; bool getpercent() const; int getpadding() const; int getradius() const; qbrush getvaluebrush() const; qcolor getvaluecolor() const; qcolor getbgcolor() const; qcolor gettipcolor() const; qcolor gettextcolor() const; qsize sizehint() const; qsize minimumsizehint() const;public q_slots: //设置范围值 void trange(double minvalue, double maxvalue); void trange(int minvalue, int maxvalue); //设置最大最小值 void tminvalue(double minvalue); void tmaxvalue(double maxvalue); //设置目标值 void tvalue(double value); void tvalue(int value); //设置百分比显示 void tpercent(bool percent); //设置边距 void tpadding(int padding); //设置圆角角度 void tradius(int radius); //设置进度画刷+进度颜色+背景颜色+提示背景+文字颜色 void tvaluebrush(const qbrush &valuebrush); void tvaluecolor(const qcolor &valuecolor); void tbgcolor(const qcolor &bgcolor); void ttipcolor(const qcolor &tipcolor); void ttextcolor(const qcolor &textcolor);q_signals: void valuechanged(double value);};#endif // progressplay_h
void progresstip::paintevent(qpaintevent *){ //绘制准备工作,启用反锯齿,平移坐标轴中心,等比例缩放 qpainter painter(this); painter.trenderhints(qpainter::antialiasing | qpainter::textantialiasing); //绘制背景 drawbg(&painter); //绘制上部分提示信息 drawtip(&painter); //绘制进度 drawvalue(&painter);}void progresstip::drawbg(qpainter *painter){ painter->save(); painter->tpen(qt::nope季羡林的故事n); painter->tbrush(bgcolor); qrect rect(padding, (height() / 3) * 2, width() - padding * 2, height() / 3); painter->drawroundedrect(rect, radius, radius); painter->restore();}void progresstip::drawtip(qpainter *painter){ painter->save(); painter->tpen(qt::nopen); painter->tbrush(valuebrush == qt::nobrush ? tipcolor : valuebrush); //计算当前值对应的百分比 double step = valu低碳环保论文e / (maxvalue - minvalue); int progress = (width() - padding * 2) * step; //绘制上部分提示信息背景 qrect rect(progress, 0, padding * 2, (double)height() / 2.1); painter->drawroundedrect(rect, 2, 2); //绘制倒三角 int centerx = rect.center().x(); int inity = rect.height(); int offt = 5; qpolygon pts; pts.append(qpoint(centerx - offt, inity)); pts.append(qpoint(centerx + offt, inity)); pts.append(qpoint(centerx, inity + offt)); painter->drawpolygon(pts); //绘制文字 qstring strvalue; if (percent) { double temp = value / (maxvalue - minvalue) * 100; strvalue = qstring("%1%").arg(temp, 0, 'f', 0); } el { strvalue = qstring("%1").arg((double)value, 0, 'f', 0); } painter->tp制造业企业en(textcolor); painter->drawtext(rect, qt::aligncenter, strvalue); painter->restore();}void progresstip::drawvalue(qpainter *painter){ painter->save(); painter->tpen(qt::nopen); //定义了画刷则取画刷,可以形成渐变效果 painter->tbrush(valuebrush == qt::nobrush ? valuecolor : valuebrush); //计算当前值对应的百分比 double step = value / (maxvalue - minvalue); int progress = (width() - padding * 2) * step; qrec单数变复数的规则t rect(padding, (height() / 3) * 2, progress, height() / 3); painter->drawroundedrect(rect, radius, radius); painter->restore();}
sdk地址:https://gitee.com/feiyangqingyun/qucsdk
https://github.com/feiyangqingyun/qucsdk
到此这篇关于qt编写提示进度条的实现示例的文章就介绍到这了,更多相关qt 提示进度条内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 07:13:34,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/b78513ec0005135f3fee84920831fce9.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Qt编写提示进度条的实现示例.doc
本文 PDF 下载地址:Qt编写提示进度条的实现示例.pdf
留言与评论(共有 0 条评论) |