QML 环形进度条canvas 98行代码实现
源码
- 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行代码实现相关推荐
- python打印进度条(4行代码简单使用)
示例 from tqdm import tqdm import timenum = 10 pbar = tqdm(total=num,desc="Count",unit=" ...
- 基于canvas 2D实现微信小程序自定义组件-环形进度条
基于canvas 2D实现微信小程序自定义组件-环形进度条 最近开发一个小程序项目博闻金榜答题小程序,需要使用到一个可以显示答题倒计时的组件,基于进度条实现,下面就主要介绍基于canvas2D实现一个 ...
- html 环形进度条,详解利用canvas实现环形进度条的方法
前提:有时候在项目中会有用到进度条的情况,使用css3也可以实现,但是对于性能不好的设备,或者网络不好的情况下,卡顿现象非常明显,避免出现不流畅的尴尬情况,所以记录一下,使用canvas来实现的方法. ...
- canvas实现半圆环形进度条
html部分 <canvas id="canvas" width="150" height="150"><p>抱歉, ...
- android canvas_Android 自定义View篇(七)实现环形进度条效果
前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...
- 自定义环形进度条RoundProgressBar
一.效果图: Canvas画圆环说明: 圆环宽度不必在意,只是画笔宽度设置后达到的效果. 二.实现步骤 1.自定义View-RoundProgressBar 2.设置属性resources(decle ...
- 仿MIUI音量变化环形进度条实现
Android中使用环形进度条的业务场景事实上蛮多的,比方下载文件的时候使用环形进度条.会给用户眼前一亮的感觉:再比方我大爱的MIUI系统,它的音量进度条就是使用环形进度条,尽显小米"为发烧 ...
- 环形进度条ProgressBar
效果 代码: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color ...
- echarts实现环形进度条
效果图 实现代码 可直接复制运行: <!DOCTYPE html> <html><head><meta charset="UTF-8"&g ...
- Android花样loading进度条(四)-渐变色环形进度条
背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们对配文字环形进度条稍加变换,将圆环颜色改为渐变色的形式,使得进 ...
最新文章
- Linux服务器部署ssl证书教程,linux服务器在wdcp面板安装ssl证书教程
- java url连接,Java - 线程中的URL连接
- angular HttpClient 配置
- mysql约束添加删除数据_mysql中约束的添加,修改,与删除
- U3D 平行光阴影细节 Directional Shadow Details
- 爱上Foobar2000抛弃winamp一周年纪念日
- 为什么爬虫都用python_python为什么叫网络爬虫
- 3月20日 表单
- smartdeblur(图片模糊处理工具) v2.2
- 使用微信即时扫码开门
- 视频本地化之 AE 处理流程
- 计算机思维在生活中的应用,孩子必备的计算机思维,如何从生活中培养?
- linux nagios 监控,Nagios 监控 Linux 主机
- 九爷带你了解 zabbix 报警机制
- Hulu推荐 | 五年口碑依旧百分百好评?《汉密尔顿》上线Disney+
- 嵌入式开发 面试问答
- 我获了诺贝尔奖,却治不好你的癌症
- Android版简历(一)
- java魔塔_基于java的魔塔游戏的设计与实现论文.docx
- linux包含权限压缩文件与解压缩
热门文章
- 机器学习Normal Equation的推导(不要求矩阵求导)
- vue学习笔记-6-样式绑定
- Ajax学习笔记-get请求参数-3
- android强制权限,Android6.0动态权限,强制申请权限方法
- 飞卢服务器维护什么时候结束,2019年10月8日定期维护公告
- linux编译trinitycore,TC编译步骤之二代码安装
- python网络编程 赵宏_【干货收藏】Python面试指南大全
- python中常见的三种选择结构_循序渐进学Python:三种选择语句
- 贝叶斯公式52张牌猜黑桃A策略
- 定义视图函数时,指定具体的监听方法,访问时如果请求的方法没有设置,那么会报方法不允许 --...