QT版本:win32 QT Creator5.9.9

在QT中只有横条状的进度条,目前需要使用圆形状进度条显示进度,只能自己设计一个,可以显示圆弧、圆圈和中心文本。

设计思路:

①设计一个QWidget部件类。

提供圆圈的半径属性,根据该属性把该部件初始化为一个长宽相等的正方形部件。

②重载painterEvent()事件。

③在painterEvent事件中定义一个画家、画笔、字体对象,使用drawArc接口绘制圆弧和drawText接口绘制中心文本,最后更新部件。

a、设计时提供画笔、文本类的设置接口,用于设置圆圈和字体的模样,绘制圆时占满窗体,绘制圆弧时要根据圆的路径宽度重新获取半径,防止超出窗体;框定文本的位置,固定范围和居中显示;drawArc方法绘制的圆存在诸多毛刺,需要更改渲染模式。

b、drawArc方法默认是从3点钟方向呈逆时针绘制的,要设计方法固定为0点钟起始,进度方向可调。

④针对上一步为整个工程提供设置接口。

⑤在使用时,与QTimeLine类时间轴结合使用,可以达到动态显示的结果。

待优化:

添加进度条背景

进度条颜色渐变

饼状显示

实验结果:

在使用时可以更改颜色和形状大小,边线大小和文本样式;把该部件动作子部件时,标题框不存在,且背景色为透明色。

代码实现:

arcPainter.h:

1 #ifndef ARCPAINT_H2 #define ARCPAINT_H

3

4 #include

5 #include

6 #include

7 #include

8 #include

9 #include

10 #include

11 #include

12 #include

13 #include

14 #include

15 #include

16

17 class ArcPaint : publicQWidget18 {19 Q_OBJECT20 public:21 enum Direction {clockwise = -1, anticlockwise = 1};22 ArcPaint(QWidget *parent =nullptr);23 ~ArcPaint();24 void setRadius(int val); //设置半径25 //设置文本

26 void setCenterText(const QString &str); //字符串

27 void setCenterText(int val, const QString &catStr = NULL); //数字

28 void setCenterText(double val, const QString &catStr = NULL, int precision = 2);29 //设置弧线

30 void setArcAngle(int angle, Direction direction =clockwise); // 默认方向逆时针31 //获取画家相关参数

32 QPen *getPen();33 QFont *getFont();34 protected:35 void paintEvent(QPaintEvent *event); //重载绘画事件

36

37 private:38 double percent; //进度百分比,与current相互影响

39 int radius; //半径大小

40 intarcRangle;41 QPen *arcPen;42 QFont *font;43 QPainter *painter;44 QString text;45 };46 #endif //ARCPAINT_H

arcPainter.cpp:

1 #include "arcpaint.h"

2

3 ArcPaint::ArcPaint(QWidget *parent)4 : QWidget(parent)5 {6 radius = 100;7 arcRangle = 180;8 this->resize(radius*2, radius*2);9 painter = newQPainter();10

11 arcPen = newQPen;12 arcPen->setColor(Qt::blue);13 arcPen->setStyle(Qt::SolidLine);14 arcPen->setCapStyle(Qt::RoundCap);15 arcPen->setJoinStyle(Qt::RoundJoin);16

17 arcPen->setWidthF(10.0);18

19 font = newQFont();20 font->setPixelSize(30);21

22 text = "H";23 }24

25 ArcPaint::~ArcPaint()26 {27 delete font;28 delete arcPen;29 delete painter;30 }31

32 void ArcPaint::setRadius(intval)33 {34 radius =val;35 this->resize(radius*2, radius*2);36 }37 void ArcPaint::setCenterText(const QString &str)38 {39 text =str;40 }41

42 void ArcPaint::setCenterText(int val, const QString &catStr)43 {44 text = text.setNum(val) +catStr;45 }46

47 void ArcPaint::setCenterText(double val, const QString &catStr, intprecision)48 {49 text = text.setNum(val, 'f', precision) +catStr;50 }51

52 void ArcPaint::setArcAngle(intangle, Direction direction)53 {54 arcRangle = angle *direction;55 }56

57 void ArcPaint::paintEvent(QPaintEvent *event)58 {59 painter->begin(this);60 //设置渲染模式

61 painter->setRenderHint(QPainter::HighQualityAntialiasing, true);62 //设置画笔

63 painter->setPen(*arcPen);64 //设置文本格式

65 painter->setFont(*font);66 //设置文本显示范围

67 QRect textRect(0,0,this->width(), this->height());68 //绘制文本,在范围内居中显示

69 painter->drawText(textRect, Qt::AlignCenter, text);70

71 int penW = arcPen->width();72 //绘制圆弧

73 painter->drawArc((penW)/2,penW/2,radius*2-penW,radius*2-penW,90*16,arcRangle*16);74

75 painter->end();76 this->update();77 }78

79 QPen *ArcPaint::getPen()80 {81 returnarcPen;82 }83

84 QFont *ArcPaint::getFont()85 {86 returnfont;87 }

main.cpp:

1 #include "arcpaint.h"

2

3 #include

4

5 int main(int argc, char *argv[])6 {7 QApplication a(argc, argv);8 ArcPaint w;9 w.setArcAngle(60, ArcPaint::anticlockwise);10 w.setCenterText(60, "°");11 w.show();12 returna.exec();13 }

qt 进度条最小_QT:圆形进度条设计相关推荐

  1. Android可触摸圆形进度条,Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动...

    Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动.package com.example.test; import android.content.Context; import an ...

  2. android绘制环形进度_Android动态自定义圆形进度条

    这篇文章主要介绍了Android动态自定义圆形进度条,需要的朋友可以参考下 效果图: A.绘制圆环,圆弧,文本 //1.画圆环 //原点坐标 float circleX = width / 2; fl ...

  3. Qt工作笔记-QML自定义圆形进度条(C++后端处理数据)

    目录 原理 源码 原理 1.使用QML中的Canvas绘制圆形,用一种颜色,说明是未读取,再用另外一种颜色覆盖到原来的颜色!说明进度! 2.使用setContextProperty把C++中的某个继承 ...

  4. android圆环进度条动画,Android 圆形进度条,类似一些计步软件的进度显示!

    Android 圆形的进度条,类似于一些计步的进度显示.其实也是我们项目中的效果,只不过后来迭代中改进了,所以现在才拿出来.浏览更多安卓源码 usage android:id="@+id/a ...

  5. 自定义圆形进度条 自定义倒计时进度条

    自定义圆形进度条 自定义倒计时进度条 版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 此控件源码已开源到Github:https: ...

  6. android 签到 进度条,Android 七种进度条的样式

    当一个应用在后台执行时,前台界面就不会有什么信息,这时用户根本不知道程序是否在执行.执行进度如何.应用程序是否遇到错误终止等,这时需要使用进度条来提示用户后台程序执行的进度.Android系统提供了两 ...

  7. QT自定义圆形进度条

    以下是一个简单的示例,展示如何创建一个自定义的圆形进度条控件. 1.创建一个新的Qt控件类,继承QProgressBar类.在该类的头文件中添加以下代码:     class CircularProg ...

  8. Qt 圆形进度条实现

    1.运行截图 2.源码 .h#ifndef _QROUNDPROGRESSBAR_H_ #define _QROUNDPROGRESSBAR_H_#include <QWidget>cla ...

  9. Android自定义圆形进度条

    Android自定义圆形进度条 github地址:https://github.com/opq1289/CircleProgressView 效果图: 无动画: 有动画: 整圆: 切割圆: 具体步骤: ...

最新文章

  1. docker中操作系统与应用
  2. gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_关于TCP/IP,必知必会的十个问题!...
  3. 算法题+JVM+自定义View,隔壁都馋哭了
  4. 四部门联合约谈马云等蚂蚁集团有关人员,蚂蚁集团回应...
  5. 一个可变参数类型检查的示例
  6. php表示昨天_php输出各种时间代码表示
  7. 在JavaScript中生成特定范围内的随机整数?
  8. Hive开窗函数总结
  9. load west0479 matlab,matlab矩阵详解 - Matlab 资料库 视频 教程 讲义 代码 - 数学建模社区-数学中国...
  10. 对联广告php代码,css实现的对联广告代码
  11. 操作系统PV编程题目总结一
  12. Android 获取经纬度处理
  13. 计算机有些应用无法卸载,有些软件卸载不了怎么办_电脑软件卸载不了的正确解决方法...
  14. PS怎样把成图变成素描或者速写稿
  15. 雷电连接不到android studio,android studio连接雷电模拟器 【AS 模拟器】
  16. 0321 预习笔记直播笔记
  17. Day07-课程分类管理-课程分类显示前端-p104
  18. CocosCreator 创建纯色精灵(Sprite单色)组件
  19. 智能语音语义时代,产品经理怎么让AI更聪明?(效果向)
  20. java怎么做沙子合并,那些java沙子游戏如何跟踪这么多粒子?

热门文章

  1. SAP License:SAP 移动类型详解
  2. linux shell 多线程执行程序
  3. k8s集群之master节点部署
  4. Codeforces 1065E(计数)
  5. jetson刷机遇到cuda装不了
  6. java编程思想 Chapter 2
  7. 自定义加载等待框(MBProgressHUD)
  8. C# Winform程序本地化应用
  9. Java中的基本类型和引用类型(未完)
  10. 从现在开始,争取记录每天所学到的、所感受到的、所遇见到的点点滴滴!