QT案例 使用QGraphicsView和命令模式设计完成流程图功能软件,参考QT官方流程图案例【diagramscene】

news/2024/5/19 0:09:45 标签: qt, 命令模式, 流程图

之前总结资料时候,看到一个Qt实现流程的专栏,后面就想着参考这个项目和官方的【diagramscene】项目,自己再写一个流程图软件来总结学习下,于是就想到使用QGraphicsView来完成相关功能,再使用命令模式来优化使用过程,再通过XML保存和加载记录等。
耗时大半个月,终于完成;具体内容讲解会按功能,划分为多个文章,当前为整个内容导读。

导读

    • 开发软件版本
    • 获取资源文件
    • 案例程序界面
    • Gif运行示例
      • 快捷键说明
    • 可执行程序下载
    • 参考案例

开发软件版本

开发软件:Qt Creator 5.13.1
使用库:XML . SVG

获取资源文件

经过多次的尝试,发现使用QGraphicsRectItem,或QGraphicsPathItem,或QGraphicsPixmapItem来实现流程图的过程,可选过程、决策、数据、等单元时过于复杂且样式难看,后来通过查看WPS的资源文件发现是直接使用的SVG文件,就可以使用 QGraphicsSvgItem类实现相关功能:
PNG参考路径:
WPS\Office\11.1.0.13703\office6\mui\default\resource\autoshape\tempRes32x32
SVG参考路径:
WPS\Office\11.1.0.13703\office6\mui\default\resource\autoshape\tempRes
在这里插入图片描述
注:案例在实现功能过程只使用了flowchart 文件夹中的要素,其实整个案例可以都使用svg文件包括连接线文本之类的,不过由于过于复杂就放弃了。

案例程序界面

界面整体使用 Fusion 样式,左侧流程控制单元使用 FlowLayout 布局能自适应宽度布局,右侧是整个流程显示区域:
在这里插入图片描述
具体功能实现主要是:
1.左侧按钮使用FlowLayout 布局,参考学习官方的FlowLayout案例;
2.实现把左侧 QToolButton 流程单元拖拽到右侧 QGraphicsView 内容中;
3.重构QGraphicsTextItem 实现文本内容显示 ,包括Html内容的显示
4.重构QGraphicsSvgItem 实现外接矩形的拖拽拉伸
5.重构QGraphicsLineItem 实现两个图元之间的连续,并跟随移动
6.实现图元拖拽时,图元对象之间的磁吸线功能
7.定义一个命令角色基类 ,定义个请求者角色对象,完成命令模式设计
8.生成多个命令对象,用于对界面删除图元,新增图元,连线图元等操作的执行与撤销动作
9.通过xml文件格式保存和读取历史流程记录
整个案例软件的功能简单,模块功能分明。充分的展示了项目开发工作中常用的一些功能很值得学习借鉴;
功能图解:
请添加图片描述

Gif运行示例

快捷键说明

画框选择拖拽
双击编辑本文
长按shift 加鼠标左键连线
选中后按delete删除
Ctrl加S 保存
Ctrl 加Z 撤销动作
Ctrl加Y 执行动作
按住鼠标中键拖拽
请添加图片描述

可执行程序下载

测试 QT 实现流程图案例的可执行程序 不是源码

参考案例

官方 diagramsceneFlowLayout 案例
Qt开发技术:QtSVG介绍、使用和Demo*
Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框架构思*


http://www.niftyadmin.cn/n/156367.html

相关文章

【调优】Linux优化Swap设置

【调优】Linux优化Swap设置 1 通过free -h查询到 free -h 内存还剩余很多,却使用 swap 分区; 原因分析: 1.swap设置开启的阀值过大,造成内存达到可使用swap的值 2.docker 设置了内存限制,但没限制swap的值(待求证) …

事务的4大特性、事务隔离级别、事务传播行为

一.事务的四大特性原子性:在一个事务中,像增删改(DML)要么全部成功,要么全部失败。一致性:事务完成时,必须使所有数据都保持一致的状态,例如:在银行转账,A向B…

虚拟试穿知识总结

数据集下载: DeepFashion Database 填写发布协议: 普通图:256*256 高清图:750*1101 视频拆帧 #视频拆帧import cv2 vccv2.VideoCapture(./MP4/test2.mp4)print(Width,vc.get(3)) #0-18,19种属性 print(Height,vc.get(4))#视频能否…

MybatisPlus QueryWrapper中and/or多条件筛选失效

需求: 在做会议室查询时,有一项会议室容量支持多选,在使用QueryWrapper.between查询时,拼接了多项容量参数,但发现拼接后前面的条件失效了. 也就是容量参数拼接时,or的方法和前面的and方法做了合集,正确方案需要将容量参数整个包起来当作一项参数和前面的参…

opentcs开源项目如何新增一个驱动commAdapter?

文章目录opentcs开源项目如何新增一个驱动commAdapter?opentcs是什么?opentcs基本模块介绍基于LoopbackAdapter创建一个TestAdapter1、 复制openTCS-CommAdapter-Loopback 模块命名为openTCS-CommAdapter-Koobot2、修改包名和目录下Loopback前缀的文件名…

Shifu高级功能:命令行中间件之HTTP 到 PowerShell 的中间件

简介 为了让你的设备接入Shifu。我们用Go编写了一个简单的HTTP到 PowerShell 的中间件,供开发者使用。 设计 这个HTTP到PowerShell的中间件是这样设计的: 中间件在主机上暴露了一个HTTP接口该HTTP接口用于转发来自外部的请求到 Windows 主机中间件将…

Apache开启不同端口发布多个网站

之前写过一篇Apache环境,单个端口运行多个网站的文章,使用不同域名映射到不同目录上。 《Apache中多个域名网站配置》 这次记录一下,Apache环境,如何开启多个端口服务,不同端口映射到不同的目录的文章,这次…

小程序:web-view使用

官方文档 注意事项 个人类型的小程序暂不支持使用网页内 iframe 的域名也需要配置到域名白名单。每个页面只能有一个 web-view,web-view 会自动铺满整个页面,并覆盖其他组件。web-view 网页与小程序之间不支持除 JSSDK 提供的接口之外的通信。在 iOS 中…