Qml圆形波浪进度条

作者: zhengtianzuo | 来源:发表于2018-11-29 20:39 被阅读0次

参考 Canvas制作动态进度加载水球
感谢原博主的分享

    //range信息
    property int rangeValue: 66;
    property int nowRange: 0;

    //画布
    property int mW: 250;
    property int mH: 250;
    property int lineWidth: 2;

    //圆
    property double r: mH / 2; //圆心
    property double cR: r - 16 * lineWidth; //圆半径

    //Sin曲线
    property int sX: 0;
    property int sY: mH / 2;
    property int axisLength: mW;        //轴长
    property double waveWidth: 0.015;   //波浪宽度,数越小越宽
    property double waveHeight: 6;      //波浪高度,数越大越高
    property double speed: 0.09;        //波浪速度,数越大速度越快
    property double xOffset: 0;         //波浪x偏移量

    Canvas{
        id: canvas
        height: mH
        width: mW
        anchors.centerIn: parent
        onPaint: {
            var ctx = getContext("2d");

            ctx.clearRect(0, 0, mW, mH);

            //显示外圈
            ctx.beginPath();
            ctx.strokeStyle = '#148014';
            ctx.arc(r, r, cR+5, 0, 2*Math.PI);
            ctx.stroke();
            ctx.beginPath();
            ctx.arc(r, r, cR, 0, 2*Math.PI);
            ctx.clip();

            //显示sin曲线
            ctx.save();
            var points=[];
            ctx.beginPath();
            for(var x = sX; x < sX + axisLength; x += 20 / axisLength){
                var y = -Math.sin((sX + x) * waveWidth + xOffset);
                var dY = mH * (1 - nowRange / 100 );
                points.push([x, dY + y * waveHeight]);
                ctx.lineTo(x, dY + y * waveHeight);
            }

            //显示波浪
            ctx.lineTo(axisLength, mH);
            ctx.lineTo(sX, mH);
            ctx.lineTo(points[0][0],points[0][1]);
            ctx.fillStyle = '#1c86d1';
            ctx.fill();
            ctx.restore();

            //显示百分数
            ctx.save();
            var size = 0.4*cR;
            ctx.font = size + 'px Arial';
            ctx.textAlign = 'center';
            ctx.fillStyle = "rgba(14, 80, 14, 0.8)";
            ctx.fillText(~~nowRange + '%', r, r + size / 2);
            ctx.restore();

            //增加Rang值
            if(nowRange <= rangeValue){
                nowRange += 1;
            }

            if(nowRange > rangeValue){
                nowRange -= 1;
            }
            xOffset += speed;
        }

        Timer{
            id: timer
            running: false
            repeat: true
            interval: 10
            onTriggered:{
                parent.requestPaint();
            }
        }
    }
show.gif

需要完整代码请访问QtQuickExamples

相关文章

  • Qml圆形波浪进度条

    参考 Canvas制作动态进度加载水球感谢原博主的分享 需要完整代码请访问QtQuickExamples

  • Qml圆形进度条

    使用Qml的Canvas来画圆形 需要完整代码请访问QtQuickExamples

  • iOS 各种圆形进度条

    iOS 各种圆形进度条:UAProgressView iOS手把手教你实现圆形进度条

  • Android自定义圆形进度条学习

    Android中圆形进度条的应用还是挺多的,最近学习实现了圆形进度条。 思路 要实现圆形进度条, 首先要画灰色背景...

  • Qml圆形图片

    使用QtGraphicalEffects中的OpacityMask效果: 需要完整代码请访问QtQuickExam...

  • Flat风格的Qml进度条

    基于Qml的ProgressBar控件修改而成。 进度条代码 进度条样式代码 更多精彩内容请关注公众号Qt君。

  • Android圆形进度条自定义

    自定义圆形进度条 实现 圆形进度条api 使用 将MyCircleProgressView和attrs.xml下的...

  • 项目中shap的使用

    圆形 矩形边框 进度条 1. 圆形 2. 矩形边框 3. 进度条 4. 大神博客 :http://www.cnbl...

  • Qml圆形进度按钮

    首先从方形到圆形的转变只需要更改Rectangle的radius值就行了转变成圆形后就可以出现圆形进度条 需要完整...

  • Qml进度条

    基本上是官网例子上加了一些方法 需要完整代码请访问QtQuickExamples

网友评论

    本文标题:Qml圆形波浪进度条

    本文链接:https://www.haomeiwen.com/subject/jplqcqtx.html