赞
踩
环形进度条
新建一个.qml文件,注意qml文件的首字母应该大写,否则使用时会出错。文件命名为 CircleProgress.qml,代码如下:
(代码段的各个含义请看内部的注释,比较详细…)
import QtQuick 2.15
Item {
id:root
width: 200
height: 200
property real minValue: 0 //最小值
property real maxValue: Math.PI * 2 //最大值
property real currentValue: 0 //当前值
property real percent: (currentValue-minValue)/(maxValue-minValue) //百分比[0,1]
property real endValueAngle:Math.PI/2+Math.PI*2*percent
property real stepValue: 0.1
property int canvasWidth:root.width < root.height ? root.width : root.height //画布宽度
property int progressCenter:canvasWidth/2 //绘制中心
property int radius:canvasWidth/3 //半径
property int mLineWidth:canvasWidth/10 //描边宽度
property int mFontSize:mLineWidth * 2 //字体大小
//角度变化时,让画布重新绘制
onEndValueAngleChanged: {
canvas.requestPaint()
}
property color bgColor:"#E6E6E6" //背景框颜色
property color valueColor:"#050505" //进度条颜色
property int changeSpeed:30 //进度条速度
property int warningValue:75 //警告提醒上限值
property bool isStart:true //是否启动进度条更新(默认启动)
Canvas{
id:canvas
anchors.fill: parent
onPaint: {
var ctx = getContext("2d")
ctx.lineWidth = root.mLineWidth
ctx.strokeStyle = root.bgColor
ctx.lineCap = "round" //设置线端样式为圆形
//绘制背景槽
ctx.save()
ctx.beginPath()
ctx.arc(root.progressCenter,root.progressCenter,root.radius,0,Math.PI*2,false)
ctx.stroke()
ctx.restore()
//绘制进度条
ctx.save()
ctx.strokeStyle = root.valueColor
ctx.lineWidth = root.mLineWidth - 2
ctx.beginPath()
ctx.arc(root.progressCenter,root.progressCenter,root.radius,Math.PI/2,endValueAngle,false)
ctx.stroke()
ctx.restore()
}
Text{
anchors.centerIn: parent
font.family: "Microsoft YaHei"
font.pixelSize: root.mFontSize
font.bold: true
color: Number(text.slice(0,2)) < warningValue ? "black":"red"
text:qsTr("%1 %").arg(root.percent.toFixed(2)*100)
}
}
//使用定时器更新当前数值 currrentValue
Timer {
id:speedTimer
running: root.isStart
repeat: true
interval: changeSpeed
onTriggered:{
if(root.percent.toFixed(2)*100 > root.warningValue){
root.changeSpeed = 100
}else{
root.changeSpeed = 30
}
root.currentValue += root.stepValue
root.currentValue %= Math.PI * 2 //转换成弧度制
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。