用canvas+mouseArea实现的刮刮卡效果。
表层是一层色彩,用手指划开,可看到下面的文字
Lisence: MIT, 请保留本文档说明
Author: surfsky.cnblogs.com 2015-02
【先看效果】

【下载】
http://download.csdn.net/detail/surfsky/8445011
【核心代码】
1 Canvas {
2 id: canvas
3 anchors.fill: parent
4
5 //
6 property bool isFirstPaint : true;
7 property point lastPt;
8
9 //
10 onPaint: {
11 var ctx = getContext('2d');
12 if (isFirstPaint){
13 // 首次绘制刮刮层图案
14 ctx.fillStyle = root.maskColor;
15 ctx.fillRect(0, 0, width, height);
16 isFirstPaint = false;
17 }
18 else{
19 // 去除鼠标位置的图案
20 clearRound(ctx, lastPt, 20);
21 lastPt = Qt.point(area.mouseX, area.mouseY);
22 }
23 }
24
25 // 清除圆形区域
26 function clearRound(ctx, p, r)
27 {
28 ctx.save();
29 ctx.globalCompositeOperation = 'destination-out';
30 ctx.beginPath();
31 ctx.arc(p.x, p.y, r, 0, 2*Math.PI, false);
32 ctx.fill();
33 ctx.restore();
34 }
35
36 // 记录下最后的鼠标点,并请求canvas重绘
37 MouseArea {
38 id: area
39 anchors.fill: parent
40 onPressed: {canvas.lastPt = Qt.point(mouseX, mouseY);}
41 onPositionChanged: {canvas.requestPaint();}
42 }
43 }
来源:https://www.cnblogs.com/surfsky/p/4290708.html