《QmlBook》笔记(13):简单绘图板

这个博客展示了如何使用QtQuick来创建一个颜色选择工具,包括一个可点击的颜色方块,用户可以选择不同的颜色,并通过点击更新画笔颜色。在主窗口中,用户可以使用所选颜色在画布上进行绘画,实现了一个简单的绘图应用。
摘要由CSDN通过智能技术生成

ColorSquare.qml

import QtQuick 2.0

Rectangle
{
    id: colorSquare;
    width: 48; height: 48
    color: "green"
    signal clicked
    property bool active: false
    border.color: active? "#666666" : "#f0f0f0"
    border.width: 2

    MouseArea
    {
        id: area
        anchors.fill :parent
        onClicked:
        {
            colorSquare.clicked()
        }
    }
}

main.qml

import QtQuick 2.9
import QtQuick.Window 2.2

Window
{
    visible: true
    width: 640
    height: 480
    Row
    {
        id:colorTools//颜色提取工具
        anchors
        {
            horizontalCenter: parent.horizontalCenter
            top: parent.top
            topMargin: 8
        }
        property color paintColor: "#33b5e5"//设置初始画笔颜色
        spacing: 4;
        Repeater
        {
            //四个colorSquare
            model: ["#33B5E5", "#99CC00", "#FFBB33", "#FF4444"]//modelData 颜色数据
            ColorSquare
            {
                id:red;
                color: modelData;
                active: parent.paintColor === color//当选中一个colorSquare时,当前画笔颜色为选中的颜色
                onClicked:
                {
                    parent.paintColor = color
                }
            }
        }
    }
    Rectangle
    {
        anchors.fill: canvas
        border.color: "#666"
        border.width: 4;
    }
    Canvas
    {
        id:canvas;
        anchors
        {
            left: parent.left;
            right:parent.right;
            top:colorTools.bottom;
            bottom: parent.bottom;
            margins: 8
        }

        //鼠标点击坐标位置
        property real lastX
        property real lastY
        property color color: colorTools.paintColor

        onPaint:
        {
            var ctx = getContext("2d")
            ctx.lineWidtn = 5
            ctx.strokeStyle = canvas.color;
            ctx.beginPath()
            ctx.moveTo(lastX,lastY)
            lastX = area.mouseX;
            lastY = area.mouseY;
            ctx.lineTo(lastX,lastY)
            ctx.stroke()
        }
        MouseArea
        {
            id:area;
            anchors.fill: parent;
            onPressed:
            {
                canvas.lastX = mouseX;
                canvas.lastY = mouseY;
            }
            onPositionChanged:
            {
                canvas.requestPaint()//当鼠标press位置改变  完成当前绘制
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值