怎样用canvas画网格背景?

展示效果
在这里插入图片描述
整个代码

<!doctype html>
<html lang="zh-zn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body {
            background: #eeeeee;
            margin: 0;
            padding: 0;
        }
        #canvas {
             background: #ffffff;
             border: 1px solid #ccc;
            box-sizing: border-box;
            cursor: pointer;
        }
    </style>
</head>
<body>
<canvas id="canvas" width="1900" height="800"
        style="border:1px solid #000000;">
</canvas>

<script>
    var canvas = document.getElementById('canvas');
    context = canvas.getContext('2d');
    function drawGrid(color, stepx, stepy) {
        context.save()
        context.fillStyle = 'white';
        console.log(context);
        context.fillRect(0, 0, context.canvas.width, context.canvas.height);
        context.lineWidth = 0.5;
        context.strokeStyle = color;
        for (var i = stepx; i < context.canvas.width; i += stepx) {
            context.beginPath();
            context.moveTo(i, 0);
            context.lineTo(i, context.canvas.height);
            context.closePath();
            context.stroke();
        }
        for (var j = stepy; j < context.canvas.height; j += stepy) {
            context.beginPath();
            context.moveTo(0, j);
            context.lineTo(context.canvas.width, j);
            context.closePath();
            context.stroke();
        }
        context.restore();
    }
    drawGrid('#ccc', 20, 20);
</script>
</body>
</html>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,这是一个比较复杂的程序,需要一步步来完成。首先,我们需要在QML中创建一个canvas元素,并设置它的宽高和背景色。代码如下: ```qml Canvas { id: canvas width: 800 height: 600 backgroundColor: "white" } ``` 接下来,我们需要创建一个按钮元素,用于触发绘制圆形的操作。代码如下: ```qml Button { id: drawButton text: "Draw Circle" onClicked: { // 添加绘制圆形的代码 } } ``` 在按钮的onClick事件中,我们需要添加绘制圆形的代码。具体来说,我们需要监听canvas元素的mouse事件,并在鼠标拖动的过程中绘制圆形。代码如下: ```qml canvas.onMouseXChanged: { if (MouseArea.isPressed) { var ctx = canvas.getContext("2d") ctx.beginPath() ctx.arc(MouseArea.mouseX, MouseArea.mouseY, 20, 0, 2 * Math.PI) ctx.stroke() } } ``` 在这段代码中,我们使用canvas的getContext方法获取到2D上下文对象ctx,然后使用beginPath方法开始绘制路径,并使用arc方法绘制圆形。最后使用stroke方法绘制出路径。 接下来,我们需要实现选中绘制结果后进行拉伸和旋转的操作。这个可以使用QML内置的Transform元素来实现。具体来说,我们需要在canvas上添加一个MouseArea元素,用于监听鼠标事件,并在鼠标点击时添加一个Transform元素,用于对绘制结果进行变换。代码如下: ```qml MouseArea { id: mouseArea anchors.fill: parent onClicked: { var transform = Qt.createQmlObject("import QtQuick 2.15; Transform {}", canvas) transform.origin.x = MouseArea.mouseX transform.origin.y = MouseArea.mouseY canvas.transform = transform } } ``` 在这段代码中,我们使用Qt.createQmlObject方法动态创建一个Transform元素,并设置它的origin属性为鼠标点击的位置。最后将该Transform元素设置canvas的transform属性即可。 最后,我们需要实现通过滚轮控制整个布的大小,并让布上的绘制结果跟着一起变化。这个可以使用QML内置的Scale元素来实现。具体来说,我们需要在canvas上添加一个MouseArea元素,用于监听鼠标滚轮事件,并在滚动时修改canvas的scale属性。代码如下: ```qml MouseArea { id: mouseArea anchors.fill: parent onWheel: { canvas.scale += wheel.angleDelta.y / 120 } } ``` 在这段代码中,我们使用onWheel事件监听鼠标滚轮事件,并在滚动时修改canvas的scale属性。这样就可以实现整个布的缩放了。 以上就是一个基于QT的QML程序的实现过程,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值