QML中的Canvas绘图---渐变

QML中的Canvas的画布功能其实和js以及h5的Canvas基本一样,以下是我使用QML的Canvas绘出渐变效果的代码,在过程中出现的几个问题,都是由几个关键的数据控制的,这个一般在网上和帮助文档都很少有资料,记录下

//mainView's right view background,the size is fix
import QtQuick 2.0
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import QtQuick.Window 2.2

Rectangle {
    width: 1364
    height: 1080
    border.width: 0
    color: "transparent";
    Canvas{
        id:myCanvas;
        anchors.fill: parent;
        onPaint: {
            var ctx = myCanvas.getContext("2d");
            var grd = ctx.createLinearGradient(0,0,1364,0);  //设置渐变的范围 x,y,x1,y1
            //由于设置的时两个,所有只有两种,当设置出现的三个的时候,会正常 1-2-3类型的显示渐变(渐变的属性时根据设置的颜色的值的变化,r,g,b,a)
            grd.addColorStop(0.0,Qt.rgba(0,0,0,0));
            grd.addColorStop(0.32,Qt.rgba(0,0,0,0.75));//渐变设置到40%的位置时停止
            grd.addColorStop(1.0,Qt.rgba(0,0,0,0.75));//渐变设置到100%的位置时停止
            ctx.fillStyle = grd;
            ctx.beginPath();
            //可去除边框
            ctx.fillRect(0,0,1364,1080);
            //不可去除边框
//            ctx.rect(0,0,1364,1080);;
//            ctx.fill();
            ctx.stroke();
        }
        Component.onCompleted: {
            requestPaint();
        }
    }
}

createLinearGradient()函数里面的参数分别是x,y,x1,y1,对此特意测试过,当x和x1相同时,实现的渐变是上下矩形形状的渐变,同理y和y1相同时,实现的渐变是左右矩形形状的渐变,当两者都不相同的时候,实现的是对角线类型的渐变。

第二个就是onPaint信号的问题,Canvas提供paint信号,只有在发出requestPaint()信号的时候,才会调用onPaint的内容。

第三个就是绘出的图形带有边框的问题,这个问题可以看上面的代码的注释部分,fillRect()与fill(),rect()函数之间的区别,个人理解是,fillRect()字面意思就是填充rect,而不是先画出rect,再fill,是直接跳过画rect,进行fill对应的rect区域

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庐州李大爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值