热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QML进阶球形进度条(圆形进度条)

先上图,确认一下是否是你需要的图片。实现思路1、利用canvas画图工具画出圆形circle1(外围的大圆)2、画出内部的小圆区域,利用clip函数裁剪。裁剪后,只有圆内的图像才可





先上图,确认一下是否是你需要的图片。


实现思路

1、利用canvas画图工具画出圆形circle1(外围的大圆)
2、画出内部的小圆区域,利用clip函数裁剪。裁剪后,只有圆内的图像才可以显示,圆外的不显示。clip裁剪的功能如果你不懂,可以[看这里](https://www.w3school.com.cn/tags/canvas_clip.asp)
3、裁剪后利用percent绑定填充区域的上边界,进行颜色填充,填充的时候,我们采用矩形填充即可,如下图,因为clip已经限定了只能在圆内显示。
4、设置一个定时器,来自动的更显percent的值。

不添加clip()图像如下:



添加clip()的图像如下:



实现代码

CircleProcBar.qml

import QtQml 2.12
import QtQuick 2.12
import QtQuick.Controls 2.12
Rectangle {
width: 220
height: 220
property int percent: 0
Canvas {
id:canvas
anchors.fill: parent
onPaint: {
var ctx = getContext("2d");
ctx.clearRect(0, 0, width, height); // 清除一块矩形区域
ctx.beginPath(); // 开始画图
ctx.lineWidth =3 // 设置边线粗为3
ctx.strokeStyle = '#148113'; // 设置颜色
ctx.arc(width / 2, height / 2, width / 2 - 5, 0, 2*Math.PI); // arc函数画大圆
ctx.stroke(); // 设置大圆圈颜色
ctx.beginPath();
ctx.arc(width / 2, height / 2, width / 2 - 10, 0, 2*Math.PI); // 绘制第二个小圆区域
ctx.clip(); // 进行裁剪
ctx.save(); // 保存当前状态,压入栈内
ctx.beginPath();
ctx.lineTo(0, height -10 - percent * (width - 20) / 100); // 绘制填充矩形左上角[0,height - bottomMargin - 填充高度],圆圈距离矩形框上下左右四个边的距离都是10个像素
ctx.lineTo(width, height -10 - percent * (height - 20) / 100); // 绘制填充矩形右上角,[width,height - bottomMargin - 填充高度]
ctx.lineTo(width, height -10); // 绘制填充矩形左下角
ctx.lineTo(0, height -10) // 绘制填充矩形右下角
ctx.lineTo(0, height -10 - percent * (width - 20) / 100); // 回到起点,形成一个矩形
ctx.fillStyle = '#148014';
ctx.fill(); // 对区域进行填充
ctx.restore(); // 回退栈
}
}
Timer {
id: runTimer
running: false // 定时器默认为false,不启动
repeat: true // 循环定时器
interval: 100 //时间间隔为 100毫秒
onTriggered: {
percent += 1; // 每次percent+1
canvas.requestPaint(); // 重新绘制
if (percent == 100) { // 如果percent==100,则停止定时器
running = false;
}
}
}
Text {
width: 30
height: 100
anchors.centerIn: parent
text: String("%1%").arg(percent) // 中间显示当前的进度
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: "black"
font.pixelSize: 30
}
MouseArea {
anchors.fill: parent
onClicked: {
runTimer.running = true; // 点击屏幕的圆圈启动定时器,根据需要,在外侧启动定时器。
}
}
}

有疑问欢迎评论交流。



推荐阅读
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 通过优化模板消息机制,本研究提出了一种高效的信息化推送方案。该方案利用获取的访问令牌(access token)和指定的模板ID,实现了精准且快速的信息推送,显著提升了用户体验和信息传递效率。具体实现中,通过调用相关API接口,确保了消息的准确性和及时性,为用户提供更加便捷的服务。 ... [详细]
  • 从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南
    从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南 ... [详细]
  • 状态模式在软件设计中的应用与实现
    本文以酒店管理系统为例,探讨了状态模式在软件设计中的应用与实现。酒店房间的状态包括空闲、已预订和已入住,这些状态之间可以相互转换。通过引入状态模式,系统能够更加灵活地管理和响应不同状态下的操作,提高了代码的可维护性和扩展性。此外,状态模式还简化了状态转换的逻辑处理,使得系统的整体架构更为清晰和高效。 ... [详细]
  • 使用 MyEclipse 和 TestNG 测试框架在 Java 中高效进行单元测试
    通过MyEclipse集成TestNG测试框架,可以在Java开发中高效地进行单元测试。本文介绍了在JDK 1.8.0_121和MyEclipse 10.0离线环境下配置和使用TestNG的具体步骤,帮助开发者提高测试效率和代码质量。 ... [详细]
  • 在使用群报数小程序进行高效接龙与统计时,可以通过创建 `LinkedList` 对象并利用 `for` 循环生成指定数量的 `Person` 对象,为每个人员分配唯一的编号,并将其添加到 `LinkedList` 集合中。这一过程确保了数据的有序性和高效管理,便于后续的接龙和统计操作。此外,该小程序还支持实时更新和查看参与人员的状态,进一步提升了活动组织的便利性和准确性。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 本文探讨了在Android应用中实现动态滚动文本显示控件的优化方法。通过详细分析焦点管理机制,特别是通过设置返回值为`true`来确保焦点不会被其他控件抢占,从而提升滚动文本的流畅性和用户体验。具体实现中,对`MarqueeText.java`进行了代码层面的优化,增强了控件的稳定性和兼容性。 ... [详细]
  • 如何在 Java LinkedHashMap 中高效地提取首个或末尾的键值对? ... [详细]
  • 在 Android 开发中,通过合理利用系统通知服务,可以显著提升应用的用户交互体验。针对 Android 8.0 及以上版本,开发者需首先创建并注册通知渠道。本文将详细介绍如何在应用中实现这一功能,包括初始化通知管理器、创建通知渠道以及发送通知的具体步骤,帮助开发者更好地理解和应用这些技术细节。 ... [详细]
  • 利用PaddleSharp模块在C#中实现图像文字识别功能测试
    PaddleSharp 是 PaddleInferenceCAPI 的 C# 封装库,适用于 Windows (x64)、NVIDIA GPU 和 Linux (Ubuntu 20.04) 等平台。本文详细介绍了如何使用 PaddleSharp 在 C# 环境中实现图像文字识别功能,并进行了全面的功能测试,验证了其在多种硬件配置下的稳定性和准确性。 ... [详细]
  • Webpack与Babel的配置详解及优化策略深入探讨了这两个工具在现代前端开发中的应用。Babel作为一款强大的JavaScript编译器,能够将最新版的JavaScript代码转换为广泛兼容的版本,从而突破浏览器对ES规范的支持限制,确保开发者可以无缝使用最新的语言特性。本文不仅介绍了如何高效配置Webpack与Babel,还提供了多种优化策略,以提升构建性能和代码质量。 ... [详细]
author-avatar
笑意江湖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有