qt 进度条最小_QT:圆形进度条设计
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:圆形进度条设计相关推荐
- Android可触摸圆形进度条,Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动...
Android 可滚动圆形进度条 滑块和进度在进度条上面跟着滚动.package com.example.test; import android.content.Context; import an ...
- android绘制环形进度_Android动态自定义圆形进度条
这篇文章主要介绍了Android动态自定义圆形进度条,需要的朋友可以参考下 效果图: A.绘制圆环,圆弧,文本 //1.画圆环 //原点坐标 float circleX = width / 2; fl ...
- Qt工作笔记-QML自定义圆形进度条(C++后端处理数据)
目录 原理 源码 原理 1.使用QML中的Canvas绘制圆形,用一种颜色,说明是未读取,再用另外一种颜色覆盖到原来的颜色!说明进度! 2.使用setContextProperty把C++中的某个继承 ...
- android圆环进度条动画,Android 圆形进度条,类似一些计步软件的进度显示!
Android 圆形的进度条,类似于一些计步的进度显示.其实也是我们项目中的效果,只不过后来迭代中改进了,所以现在才拿出来.浏览更多安卓源码 usage android:id="@+id/a ...
- 自定义圆形进度条 自定义倒计时进度条
自定义圆形进度条 自定义倒计时进度条 版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 此控件源码已开源到Github:https: ...
- android 签到 进度条,Android 七种进度条的样式
当一个应用在后台执行时,前台界面就不会有什么信息,这时用户根本不知道程序是否在执行.执行进度如何.应用程序是否遇到错误终止等,这时需要使用进度条来提示用户后台程序执行的进度.Android系统提供了两 ...
- QT自定义圆形进度条
以下是一个简单的示例,展示如何创建一个自定义的圆形进度条控件. 1.创建一个新的Qt控件类,继承QProgressBar类.在该类的头文件中添加以下代码: class CircularProg ...
- Qt 圆形进度条实现
1.运行截图 2.源码 .h#ifndef _QROUNDPROGRESSBAR_H_ #define _QROUNDPROGRESSBAR_H_#include <QWidget>cla ...
- Android自定义圆形进度条
Android自定义圆形进度条 github地址:https://github.com/opq1289/CircleProgressView 效果图: 无动画: 有动画: 整圆: 切割圆: 具体步骤: ...
最新文章
- docker中操作系统与应用
- gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_关于TCP/IP,必知必会的十个问题!...
- 算法题+JVM+自定义View,隔壁都馋哭了
- 四部门联合约谈马云等蚂蚁集团有关人员,蚂蚁集团回应...
- 一个可变参数类型检查的示例
- php表示昨天_php输出各种时间代码表示
- 在JavaScript中生成特定范围内的随机整数?
- Hive开窗函数总结
- load west0479 matlab,matlab矩阵详解 - Matlab 资料库 视频 教程 讲义 代码 - 数学建模社区-数学中国...
- 对联广告php代码,css实现的对联广告代码
- 操作系统PV编程题目总结一
- Android 获取经纬度处理
- 计算机有些应用无法卸载,有些软件卸载不了怎么办_电脑软件卸载不了的正确解决方法...
- PS怎样把成图变成素描或者速写稿
- 雷电连接不到android studio,android studio连接雷电模拟器 【AS 模拟器】
- 0321 预习笔记直播笔记
- Day07-课程分类管理-课程分类显示前端-p104
- CocosCreator 创建纯色精灵(Sprite单色)组件
- 智能语音语义时代,产品经理怎么让AI更聪明?(效果向)
- java怎么做沙子合并,那些java沙子游戏如何跟踪这么多粒子?