基于Qt的流程设计器(一)

摘要:
如需继续,如果您喜欢,请单击推荐-----------------------˃代码将在下一篇文章中发布
一:
先来看一下界面的截图:
基于Qt的流程设计器(一)第1张
 基于Qt的流程设计器(一)第2张
说明:
拖动节点的时候,与该节点相关的箭头连线也会跟着调整;
用户可以使用鼠标从一个节点拖出一个箭头到另一个节点(鼠标在空白区域点击一下,拖出的箭头消失)
 
基于Qt的流程设计器(一)第3张
这三个图标,手型图标处于选中状态的时候,节点可以拖动,
箭头图标处于选中状态的时候,可以使用鼠标绘制连线箭头
最后一个图标,用于在画布上创建一个节点方框
 
二:
关键代码文件如下图(用红框框住的为关键代码文件)
基于Qt的流程设计器(一)第4张
其他文件均为辅助代码文件(有些文件中的代码没有用到)
 
三:
CustomView类是我们的绘图面板,这个类继承自QGraphicsView
在这个类的构造函数中,我们创建了他的QGraphicsScene
基于Qt的流程设计器(一)第5张
并设置了它的大小(这也是为什么我们的绘图板有滚动条的原因)
另外需要注意的是QGraphicsScene的坐标原点在中心位置,如下图所示
 
基于Qt的流程设计器(一)第6张
 
四:
CustomArrow是描述箭头连线的类:
这个类继承自QGraphicsItem
基于Qt的流程设计器(一)第7张
boundingRect是QGraphicsItem的虚函数,必须要实现,
其中1.5是箭头连线的线宽,8是箭头张开后所占的区域宽度
p1是箭头的起始点,p2是箭头结束点(也就是带箭头的那一端)
最终返回的一个Rect结构如下图所示:(注意箭头的起点,在上一个方框的中心点上)
基于Qt的流程设计器(一)第8张
 
五:
我给CustomArrow类公开了一个adjust函数,旨在当方框节点移动的时候,重新计算箭头的起始位置、结束位置、箭头的角度
代码如下:
 
基于Qt的流程设计器(一)第9张
其中:itemA是起始处的方框节点,itemB是结束处的方框节点
注意mapFromItem是把方框节点中心点映射到scene坐标系中
紧接着的if,else是为了判断起始方框是否位于结束方框的下方,如果是,那么箭头的终点应该在结束方框的下边框上
接下来是计算出箭头的两个点arrowP1和arrowP2
 
六:
绘制箭头的工作是在CustomArrow的paint函数中完成的,代码如下所示
基于Qt的流程设计器(一)第10张
箭头只不过是一个多边形,用drawPolygon画出来的
 
七:
CustomRect继承自QGraphicsRectItem
在这个类型中,我们重载了itemChange函数,代码如下
基于Qt的流程设计器(一)第11张
当当前方框节点移动后,与这个节点相关的箭头都要跟着移动
Arrows就是与当前方框节点有关的箭头
 
八:
在来看一下CustomRect的MousePressEvent的代码
基于Qt的流程设计器(一)第12张
在这个代码中,
我们先为全局标志ScenClickFlag赋值,
这个标志着当前点击的是一个方框节点,还是点击在画布的空白处了
接下来判断箭头按钮是不是处于选中状态
再往下判断是不是已经记录了起始方框,如果没记录,那么就记录并返回
再接下来,就意味着用户是点击的结束方框,这时要绘制一个箭头了,
当然首先要判断是不是已经存在了同样的箭头,如果存在了,就没必要再绘制了,
ScenClickFlag置成true是为了冒泡触发画布的点击事件(后续会讲为什么要允许事件冒泡)
接下来执行了绘制箭头的逻辑,并在起始节点和结束节点分别记录了箭头的指针
以后这两个节点移动的时候,箭头也会跟着移动了。
 
 
 
未完待续,喜欢的话请点推荐(您的支持,是我的动力)--------------------->
代码会在下一篇文章中发布
 
 

免责声明:文章转载自《基于Qt的流程设计器(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jmeter 运行结果的csv文件生成报告Arduino 101/Genuino101使用-第2篇下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

端游数值设计思路流程

写这篇博客的初衷,主要是想对自己这几年的数值设计工作进行一个记录、总结和提炼,以后能够温故知新,不断提升自己的设计水平。这里,我将一款端游的数值设计划分为以下几个主要的模块:战斗体系、经济体系(宏观层面)、消耗模块(成长线、日常消耗、其他消耗)、产出模块(任务、活动、玩法)、数值调优、数值配置。 战斗体系:关乎玩家在游戏内的战斗体验(PVP、PVE),...

IC设计流程之实现篇——全定制设计

要谈IC设计的流程,首先得搞清楚IC和IC设计的分类。集成电路芯片从用途上可以分为两大类:通用IC(如CPU、DRAM/SRAM、接口芯片等)和专用IC(ASIC)(Application Specific Integrated Circuit),ASIC是特定用途的IC。从结构上可以分为数字IC、模拟IC和数模混合IC三种,而SOC(System On...

Redis服务设计(处理流程、事件模型、多路复用)

简介 Redis作者: 意大利人 Salvatore Sanfilippo(网名 Antirez) 开发。Antirez 不仅帅的不像实力派,也非常有趣。Antirez 今年已经四十岁了,依旧在孜孜不倦地写代码,为 Redis 的开源事业持续贡献力量。 Redis是一个开放源代码(BSD许可)内存中的数据结构存储,用作数据库、缓存和消息代理。它支持字符串、...

flowable流程中心设计之会签(二)

说明  某些业务场景,审核需要多个人审核,然后根据审核结果判定是通过还是拒绝,可以理解为投票 会签内置参数  作用   用于会签决策相关    参数名字  说明  nrOfInstances  一共多少实例  nrOfCompletedInstances  已经完成审批数量(包含审批结果为通过和拒绝的)  nrOfActiveInsta...

产品人必备干货:产品开发流程(完整版)

1引言 1.1目的 基于现在的开发流程中缺少的环节进行补足,使得开发流程更加的流畅和正规化,以便以后的查阅与归档使用。面对互联网行业中激烈的竞争,让我们的开发流程更完整、更有效率,产品才能脱颖而出。 1.2范围 本文档适用于产品的研发,主要流程包括:产品需求、交互原型、视觉设计、资源输出、前端开发、后台开发、测试等环节。以后的产品开发流程也可以参考此文档的...

主流的三款工作流进行介绍和比较

下面将对目前比较主流的三款工作流进行介绍和比较,然后通过三款流程引擎分别设计一个较典型的流程来给大家分别演示这三款创建流程的过程.这三款工作流程引擎分别是 Windows Workflow Foundation,NetBPM, CCFlow. NetBPM 与 CCFlow 是两款国内知名的开源软件,尤其是ccflow在国内的发展势头强劲。 这个典型的流程...