QML学习笔记(四)-Canva画板画图功能-跟随鼠标位置进行随笔画

简介: 参考博主文章进行整理了代码,实现功能参考:https://blog.csdn.net/UbuntuTouch/article/details/46375697源码:https://github.com/sueRimn/QML-ExampleDemos更多的鼠标实时画图-画直线画圆画矩形等看下...

参考博主文章进行整理了代码,实现功能参考:https://blog.csdn.net/UbuntuTouch/article/details/46375697

源码:https://github.com/sueRimn/QML-ExampleDemos

更多的鼠标实时画图-画直线画圆画矩形等看下一篇博文:《QML-纯qml画图-实现canvas画板功能

录制软件没有录入鼠标,实现如下图:

 

1.组件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()
        }

    }
}

设置了该组件激活状态为false,边框颜色在点击激活状态下颜色为“#666”,就是该颜色提取块被选中时边框颜色改变

2.main.qml

主文件是执行画笔功能和颜色选取,我给添加了注释,原博主的引入文件我不知道如何在cpp中注册的,所以进行了整改,完整代码如下:

import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window{
    id: root
    width: 640
    height: 480
    visible: true

    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位置改变 完成当前绘制 } } } }//Window

 

相关文章
|
算法 Windows
Winform控件优化之实现无锯齿的圆角窗体(或任意图形的无锯齿丝滑的窗体或控件)【借助LayeredWindow】
在一般能搜到的所有实现圆角窗体的示例中,都有着惨不忍睹的锯齿...而借助于Layered Windows,是可以实现丝滑无锯齿效果的Form窗体的,其具体原理就是分层窗体....
1408 0
Winform控件优化之实现无锯齿的圆角窗体(或任意图形的无锯齿丝滑的窗体或控件)【借助LayeredWindow】
Qml实用技巧:在可视元素之前半透明覆盖一个可视元素,阻止鼠标透(界面)传(防止点击到被遮挡的按钮)
Qml实用技巧:在可视元素之前半透明覆盖一个可视元素,阻止鼠标透(界面)传(防止点击到被遮挡的按钮)
Qml实用技巧:在可视元素之前半透明覆盖一个可视元素,阻止鼠标透(界面)传(防止点击到被遮挡的按钮)
|
1月前
|
图形学
小功能⭐️不用传参,Unity获得鼠标悬浮处的物体、UI!
小功能⭐️不用传参,Unity获得鼠标悬浮处的物体、UI!
|
10月前
《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取
《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取
156 0
|
Python 容器
tkinter模块高级操作(二)—— 界面切换效果、立体阴影字效果及gif动图的实现
tkinter模块高级操作(二)—— 界面切换效果、立体阴影字效果及gif动图的实现
241 0
|
开发工具 开发者
在屏幕的任意位置拖拽,控制精灵移动
在屏幕的任意位置按住拖拽,然后控制屏幕中指定的精灵移动,这个前几天@stack发过一个示例,刚好最近又有几位同学来问,说是看不懂其中的逻辑。索性就在这里详细的讲一下,原理很简单,理解透了原理,其中的积木逻辑也就很容易理解了。
101 0
|
存储
零基础VB教程038期:你能走到终点吗?利用事件拖动物体
零基础VB教程038期:你能走到终点吗?利用事件拖动物体
|
Java
JAVA鼠标屏幕绘制拖拽删除矩形
JAVA鼠标屏幕绘制拖拽删除矩形
98 0
关于 Qt图形视图框架自绘图元放到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 的解决方法
关于 Qt图形视图框架自绘图元放到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 的解决方法
关于 Qt图形视图框架自绘图元放到左边和上边之外,部分在内进行拉伸后,拉伸多余的区域无法碰撞 的解决方法
|
计算机视觉
Qt实用技巧:图形视图框架中图元将矩形边界改为不规则边界(用于选取和碰撞)
Qt实用技巧:图形视图框架中图元将矩形边界改为不规则边界(用于选取和碰撞)
Qt实用技巧:图形视图框架中图元将矩形边界改为不规则边界(用于选取和碰撞)