QML坑之canvas画虚线出现绘图状态混乱

测试版本:qt 5.12.7
通过setLineDash可以画虚线,如

Canvas{
	//...
	
	onPaint: {
	
	var ctx = getContext("2d")
	ctx.beginPath()
	ctx.strokeStyle = "black"
	ctx.lineWidth = 1
	ctx.setLineDash([])    //实线
	ctx.moveTo(100,100)
	ctx.lineTo(200,200)
	ctx.stroke()
	
	ctx.beginPath()
	ctx.setLineDash([2])    //虚线
	ctx.moveTo(100,200)
	ctx.lineTo(200,300)
	ctx.stroke()
	}
}

像上面onPaint只执行了一次是没问题的,但多次执行就会出现setLineDash乱套的问题 ,会出现绘制某个本应是实线的path时变成了虚线,某个本应是虚线的path变成实线。

property var elements: new Array()   

function newRectangle(x,y,w,h,color,dash)
{
    var elem = component.createObject(...)  //事先定义一个矩形的对象类型
    elem.item.color = color;
    elem.item.x = x;
    elem.item.y = y;
    elem.item.w = w;
    elem.item.h = h;
    elem.item.color = color;
    elem.item.dashSegment = dash;   //类型为数组,如 [] 、[5]
	elements.push(elem)
	canvas.requestPaint(); 
}
function newEllipse(x,y,w,h,color,dash)
{
//...
canvas.requestPaint(); 
}
function newLine(x0,y0,x1,x2,color,dash)
{
//...
canvas.requestPaint(); 
}



Canvas{
	id:canvas
	//...
	
	//根据元素的属性绘制元素
	function drawElement(ctx, elem)
	{
		//...
		ctx.setLineDash(elem.dashSegment)
		if(elem.role==="rectangle")   
		{
			ctx.rect(elem.x, elem.y, elem.width, elem.height)
		}
		else if(elem.role==="ellipse")  
		{
			ctx.ellipse(elem.x, elem.y, elem.width, elem.height, 0, 0, Math.Pi*2)
		}
		else if(elem.role==="line")
		{
			ctx.moveTo(elem.x0, elem.y0)
	        ctx.lineTo(elem.x1, elem.y1)
		}
		ctx.stroke()
	}	

	//用户不断添加新的元素至队列中,每次添加一个新的元素就触发一次onPaint事件
	onPaint: {
	
		var ctx = getContext("2d")

        //每次绘图前清空画布所有内容
        ctx.clearRect(0, 0, width, height);

        //遍历队列
        for(var i=0;i<elements.length;i++)
        {
            drawElement(ctx, elements[i]);
        }
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值