之前总结资料时候,看到一个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)流程图组件开发(一) 效果展示及基本开发框架构思*

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

  1. 命令模式 Java代码演示【使用命令模式实现播放器功能】

    文章目录 模式介绍 模式的结构与实现 命令模式扩展(实现播放器功能) 模式介绍 命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开.这样俩者之前通过 ...

  2. 云原生模式--设计拥抱变化的软件(三)

    目录 3.1应用程序生命周期:考虑不断的变化--运维同理心 3.2举例:多实例应用程序生命周期管理方案 3.2.1蓝 / 绿升级 3.2.2滚动升级 3.2.3并行部署 3.3协调多个不同的应用程序生 ...

  3. java课程设计打字训练测试软件_Java版打字练习案例源码

    代码如下 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension; import java ...

  4. 趣谈设计模式 | 命令模式(Command):将命令封装为对象

    文章目录 案例:智能遥控 命令模式 应用场景 队列请求 日志系统 总结 完整代码与文档 命令模式的应用场景较少,且不易理解,因此我也不好举例,所以下面的描述可能会存在一些问题,请见谅 案例:智能遥控 ...

  5. 模板方法模式详解附有代码案例分析(包含模板方法模式重构JDBC操作业务代码示例)

    模板方法模式 一.模板方法模式的概念和角色 (一).模板方法模式的概念 (二).模板方法模式的角色 二.模板方法模式的应用场景 三. 模板方法模式的代码示例 四.模板方法模式重构JDBC操作业务 五. ...

  6. 请求发送者与接收者解耦——命令模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/8796736 装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关 ...

  7. 第 17 章 命令模式

    第 17 章 命令模式 1.智能生活项目需求 我们买了一套智能家电, 有照明灯. 风扇. 冰箱. 洗衣机, 我们只要在手机上安装 app 就可以控制对这些家电工作. 这些智能家电来自不同的厂家, 我们 ...

  8. 命令模式及其在Apache IoTDB中的应用

    Motivation 在介绍命令模式的原理之前,我们先来一起考虑两个编程中经常遇到的现象. 实现一个功能 回想我们刚开始编程的时候,我们为了实现一个函数,于是根据这个函数开始设计它的输入输出,输入在写 ...

  9. 撤销和重做实现-第二部分(命令模式)

    本文是从英文的网站翻译,用作自己的整理和记录,有修改调整.水平有限,欢迎指正.原文地址:地址 一.引言 这是关于用C#编写多级撤销和重做实现的系列文章的第二部分.本系列展示了针对同一问题的三种方法的撤 ...

最新文章

  1. boost::mp11::mp_is_map相关用法的测试程序
  2. kicad最小布线宽度默认是多少_你想知道建仓库时叉车通道宽度留多少吗?
  3. bzoj2186,P2155-[SDOI2008]沙拉公主的困惑【线性筛,欧拉函数,逆元】
  4. activemq网络桥接_ActiveMQ –经纪人网络解释–第2部分
  5. 有没有比python更简单的语言排名_5月语言排行榜:R跌出前二十 Python紧咬C++
  6. java 字符界面 curses_[C++]Linux之图形界面编程库[curses库]之入门教程
  7. Android 系统(231)--OTA对要发布的编译版本进行签名
  8. java的handleback类,CallbackHandler
  9. 车险三者险可以垫付医药费吗?
  10. spring ioc控制反转
  11. 办公软件入门--word01
  12. 上海泗博自动化 Modbus 转以太网模块应用于某污水处理系统
  13. redis存短信验证码,取短信验证码
  14. android 和 js 之间交互的封装
  15. KPM算法——数据结构|复习局|串|复杂模式匹配算法|二维数组解决KPM
  16. 【系统分析与设计】前端eslint检查 + travis持续集成
  17. Android service几个问题
  18. Xutils请求数据imageloader加载图片+网络判断
  19. ddos是什么 ddos攻击方式有哪些该怎么防范?
  20. Origami Studio for Mac原型设计神器安装教程

热门文章

  1. Vue前端框架的使用
  2. Cool Edit之扫频波的生成
  3. html输入框禁止输入汉字,input输入框输入中文时,监听的input事件怎样屏蔽拼音状态...
  4. 提高程序并发量的几个建议(不看保证后悔死你)
  5. 位数不足前面补0mysql语句_SQL语句 不足位数补0
  6. html怎么引入框架,html文件中引入bootstrap框架
  7. 区块链与能源互联网的碰撞
  8. java高效随机生成随机(英文+数字),可自定义
  9. ios SDWebImage 加载图片流程
  10. request to https://registry.npm.taobao.org/jsprim failed, reason: connect ETIMEDOUT 错误解决方案