用C++ Qt实现类似Photoshop的钢笔工具

因为工作上的需求,需要实现一个类似Photoshop里面的钢笔工具,

 

 

分析一下它的功能,包括:

1. 有两种点:节点和控制点,节点是构成图形的基本端点,控制点是影响贝塞尔曲线的系数。

2. 创建节点:鼠标左键点击空白区域,即可创建一个方形节点。

 

3. 删除节点:鼠标左键单击一个已存在的节点,即可将当前所选的节点删除。

 

4. 移动节点:按住Ctrl键,长按鼠标左键在节点上,可以将节点拖拽,如果节点本身含有两个控制点,那么也会跟随一起移动。

 

5. 移动控制点:按住Ctrl或者Alt键,长按鼠标左键在控制点上,可以将该控制点单独移动。

 

6. 节点转换和旋转控制点:原本是方形节点,按住Alt键,再长按鼠标左键在其方形节点上,再拖拽可实现转换成圆形节点,并且生成两个控制节点,随着鼠标的位置不断变换,直到鼠标左键松开。

 

 

7. 闭环节点:超过3个节点(含3个)的情况下,再鼠标左键单击第一个节点,即可让线条首位相接。

 

 

 

 

实现核心:

利用Qt提供的 QPainterPath 类进行绘制,quadTo()为二次贝塞尔曲线,cubicTo()为三次贝塞尔曲线。

当两两圆形节点相邻时,就使用三次贝塞尔曲线,

一个圆形节点和一个方形节点之间,就用二次贝塞尔曲线。

 

Qt实现的成果demo演示视频:https://live.csdn.net/v/216724

 

posted @ 2022-06-17 11:23  重庆Debug  阅读(529)  评论(2编辑  收藏  举报