zoukankan      html  css  js  c++  java
  • qt qml 刮刮卡效果

    用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     }
  • 相关阅读:
    如何删除.DS_Store文件?
    STL 技巧整理 7/22
    贪心
    防线
    bfs&dfs模板
    并查集学习总结
    二叉树相关代码
    区间DP学习笔记
    多算法模板整理
    防线题解
  • 原文地址:https://www.cnblogs.com/surfsky/p/4290708.html
Copyright © 2011-2022 走看看