源码

  • 1.效果
  • 2.源码
  • 3.用法

1.效果

2.源码

import QtQuick 2.0Item {property int min: 0property int max: 100property int value: 70property int rangeLineWidth: 20property color rangeLineColor: "#f2f2f2"property int valueLineWidth: 20property color valueLineColor: "#33ccff"property bool dropShadow: trueproperty alias textSize: progressText.font.pixelSizeproperty alias textColor: progressText.color//百分比property real percentage:(value-min) / (max-min)property real startAngle: Math.PI/2;property real endAngle: ((Math.PI*2)*percentage + startAngle);Canvas {id:canvasanchors.centerIn: parentwidth: Math.min(parent.width,parent.height)height: Math.min(parent.width,parent.height)onPaint:{var ctx = getContext("2d");ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.lineCap = "round";drawRange(ctx);drawValue(ctx);}function drawRange(ctx){ctx.beginPath();ctx.arc(canvas.width/2, canvas.height/2, arcRadius(), 0, Math.PI*2, true);ctx.lineWidth = rangeLineWidth;ctx.strokeStyle = rangeLineColor;ctx.stroke();}function drawValue(ctx){ctx.save();//阴影效果大尺寸画布比较吃性能 小尺寸仍然流畅
//            ctx.shadowColor= valueLineColor;
//            ctx.shadowBlur= valueLineWidth/4;ctx.beginPath();ctx.arc(canvas.width/2, canvas.height/2, arcRadius(), startAngle,endAngle, false);ctx.lineWidth = valueLineWidth;ctx.strokeStyle = valueLineColor;ctx.stroke();ctx.restore();}function currentAngle(){var angle = Math.PI*2 * (value-min) / (max-min);angle = Math.PI*2 - angle;return angle;}function arcRadius(){return Math.min(canvas.height,canvas.width)/2 - Math.max(rangeLineWidth,valueLineWidth);}}Text {id: progressTextanchors.centerIn: parenthorizontalAlignment: Text.AlignHCenterverticalAlignment: Text.AlignVCenter//粗略计算放下5个字符最大字号font.pixelSize: (Math.min(canvas.height,canvas.width) - Math.max(rangeLineWidth,valueLineWidth)) / 5;text: "0%";}onMinChanged: refreshUI()onMaxChanged: refreshUI()onValueChanged: refreshUI()Component.onCompleted: refreshUI()function refreshUI(){//计算百分比 保留一位小数percentage = (value-min) / (max-min);percentage = percentage.toFixed(3);progressText.text = String("%1%").arg(percentage * 100);//请求重新绘制canvas.requestPaint()}
}

3.用法

创建一个进度条,数字动画、滑动条,动画自动让环形进度循环增长,滑动条可以手动调节环形进度测试用。

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.12
import QtQuick.Window 2.12Window{id:windowvisible: truewidth: 300height: 300ProgressRing{id:progressbaranchors.fill:parentmin:0max:213value:123rangeLineWidth:40}NumberAnimation  {target: progressbarproperty: "value"from:0to:213duration:10000running: trueloops: Animation.Infinite}Slider{width:parent.widthfrom: 0to:213onValueChanged: {progressbar.value = value}}
}

QML 环形进度条canvas 98行代码实现相关推荐

  1. python打印进度条(4行代码简单使用)

    示例 from tqdm import tqdm import timenum = 10 pbar = tqdm(total=num,desc="Count",unit=" ...

  2. 基于canvas 2D实现微信小程序自定义组件-环形进度条

    基于canvas 2D实现微信小程序自定义组件-环形进度条 最近开发一个小程序项目博闻金榜答题小程序,需要使用到一个可以显示答题倒计时的组件,基于进度条实现,下面就主要介绍基于canvas2D实现一个 ...

  3. html 环形进度条,详解利用canvas实现环形进度条的方法

    前提:有时候在项目中会有用到进度条的情况,使用css3也可以实现,但是对于性能不好的设备,或者网络不好的情况下,卡顿现象非常明显,避免出现不流畅的尴尬情况,所以记录一下,使用canvas来实现的方法. ...

  4. canvas实现半圆环形进度条

    html部分 <canvas id="canvas" width="150" height="150"><p>抱歉, ...

  5. android canvas_Android 自定义View篇(七)实现环形进度条效果

    前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...

  6. 自定义环形进度条RoundProgressBar

    一.效果图: Canvas画圆环说明: 圆环宽度不必在意,只是画笔宽度设置后达到的效果. 二.实现步骤 1.自定义View-RoundProgressBar 2.设置属性resources(decle ...

  7. 仿MIUI音量变化环形进度条实现

    Android中使用环形进度条的业务场景事实上蛮多的,比方下载文件的时候使用环形进度条.会给用户眼前一亮的感觉:再比方我大爱的MIUI系统,它的音量进度条就是使用环形进度条,尽显小米"为发烧 ...

  8. 环形进度条ProgressBar

    效果 代码: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color ...

  9. echarts实现环形进度条

    效果图 实现代码 可直接复制运行: <!DOCTYPE html> <html><head><meta charset="UTF-8"&g ...

  10. Android花样loading进度条(四)-渐变色环形进度条

    背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们对配文字环形进度条稍加变换,将圆环颜色改为渐变色的形式,使得进 ...

最新文章

  1. Linux服务器部署ssl证书教程,linux服务器在wdcp面板安装ssl证书教程
  2. java url连接,Java - 线程中的URL连接
  3. angular HttpClient 配置
  4. mysql约束添加删除数据_mysql中约束的添加,修改,与删除
  5. U3D 平行光阴影细节 Directional Shadow Details
  6. 爱上Foobar2000抛弃winamp一周年纪念日
  7. 为什么爬虫都用python_python为什么叫网络爬虫
  8. 3月20日 表单
  9. smartdeblur(图片模糊处理工具) v2.2
  10. 使用微信即时扫码开门
  11. 视频本地化之 AE 处理流程
  12. 计算机思维在生活中的应用,孩子必备的计算机思维,如何从生活中培养?
  13. linux nagios 监控,Nagios 监控 Linux 主机
  14. 九爷带你了解 zabbix 报警机制
  15. Hulu推荐 | 五年口碑依旧百分百好评?《汉密尔顿》上线Disney+
  16. 嵌入式开发 面试问答
  17. 我获了诺贝尔奖,却治不好你的癌症
  18. Android版简历(一)
  19. java魔塔_基于java的魔塔游戏的设计与实现论文.docx
  20. linux包含权限压缩文件与解压缩

热门文章

  1. 机器学习Normal Equation的推导(不要求矩阵求导)
  2. vue学习笔记-6-样式绑定
  3. Ajax学习笔记-get请求参数-3
  4. android强制权限,Android6.0动态权限,强制申请权限方法
  5. 飞卢服务器维护什么时候结束,2019年10月8日定期维护公告
  6. linux编译trinitycore,TC编译步骤之二代码安装
  7. python网络编程 赵宏_【干货收藏】Python面试指南大全
  8. python中常见的三种选择结构_循序渐进学Python:三种选择语句
  9. 贝叶斯公式52张牌猜黑桃A策略
  10. 定义视图函数时,指定具体的监听方法,访问时如果请求的方法没有设置,那么会报方法不允许 --...