QT案例 使用QGraphicsView和命令模式设计完成流程图功能软件,参考QT官方流程图案例【diagramscene】
之前总结资料时候,看到一个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 实现流程图案例的可执行程序 不是源码
参考案例
官方 diagramscene和FlowLayout 案例
Qt开发技术:QtSVG介绍、使用和Demo*
Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框架构思*
QT案例 使用QGraphicsView和命令模式设计完成流程图功能软件,参考QT官方流程图案例【diagramscene】相关推荐
- 命令模式 Java代码演示【使用命令模式实现播放器功能】
文章目录 模式介绍 模式的结构与实现 命令模式扩展(实现播放器功能) 模式介绍 命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开.这样俩者之前通过 ...
- 云原生模式--设计拥抱变化的软件(三)
目录 3.1应用程序生命周期:考虑不断的变化--运维同理心 3.2举例:多实例应用程序生命周期管理方案 3.2.1蓝 / 绿升级 3.2.2滚动升级 3.2.3并行部署 3.3协调多个不同的应用程序生 ...
- java课程设计打字训练测试软件_Java版打字练习案例源码
代码如下 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension; import java ...
- 趣谈设计模式 | 命令模式(Command):将命令封装为对象
文章目录 案例:智能遥控 命令模式 应用场景 队列请求 日志系统 总结 完整代码与文档 命令模式的应用场景较少,且不易理解,因此我也不好举例,所以下面的描述可能会存在一些问题,请见谅 案例:智能遥控 ...
- 模板方法模式详解附有代码案例分析(包含模板方法模式重构JDBC操作业务代码示例)
模板方法模式 一.模板方法模式的概念和角色 (一).模板方法模式的概念 (二).模板方法模式的角色 二.模板方法模式的应用场景 三. 模板方法模式的代码示例 四.模板方法模式重构JDBC操作业务 五. ...
- 请求发送者与接收者解耦——命令模式
本文转载自 :http://blog.csdn.net/lovelion/article/details/8796736 装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关 ...
- 第 17 章 命令模式
第 17 章 命令模式 1.智能生活项目需求 我们买了一套智能家电, 有照明灯. 风扇. 冰箱. 洗衣机, 我们只要在手机上安装 app 就可以控制对这些家电工作. 这些智能家电来自不同的厂家, 我们 ...
- 命令模式及其在Apache IoTDB中的应用
Motivation 在介绍命令模式的原理之前,我们先来一起考虑两个编程中经常遇到的现象. 实现一个功能 回想我们刚开始编程的时候,我们为了实现一个函数,于是根据这个函数开始设计它的输入输出,输入在写 ...
- 撤销和重做实现-第二部分(命令模式)
本文是从英文的网站翻译,用作自己的整理和记录,有修改调整.水平有限,欢迎指正.原文地址:地址 一.引言 这是关于用C#编写多级撤销和重做实现的系列文章的第二部分.本系列展示了针对同一问题的三种方法的撤 ...
最新文章
- boost::mp11::mp_is_map相关用法的测试程序
- kicad最小布线宽度默认是多少_你想知道建仓库时叉车通道宽度留多少吗?
- bzoj2186,P2155-[SDOI2008]沙拉公主的困惑【线性筛,欧拉函数,逆元】
- activemq网络桥接_ActiveMQ –经纪人网络解释–第2部分
- 有没有比python更简单的语言排名_5月语言排行榜:R跌出前二十 Python紧咬C++
- java 字符界面 curses_[C++]Linux之图形界面编程库[curses库]之入门教程
- Android 系统(231)--OTA对要发布的编译版本进行签名
- java的handleback类,CallbackHandler
- 车险三者险可以垫付医药费吗?
- spring ioc控制反转
- 办公软件入门--word01
- 上海泗博自动化 Modbus 转以太网模块应用于某污水处理系统
- redis存短信验证码,取短信验证码
- android 和 js 之间交互的封装
- KPM算法——数据结构|复习局|串|复杂模式匹配算法|二维数组解决KPM
- 【系统分析与设计】前端eslint检查 + travis持续集成
- Android service几个问题
- Xutils请求数据imageloader加载图片+网络判断
- ddos是什么 ddos攻击方式有哪些该怎么防范?
- Origami Studio for Mac原型设计神器安装教程
热门文章
- Vue前端框架的使用
- Cool Edit之扫频波的生成
- html输入框禁止输入汉字,input输入框输入中文时,监听的input事件怎样屏蔽拼音状态...
- 提高程序并发量的几个建议(不看保证后悔死你)
- 位数不足前面补0mysql语句_SQL语句 不足位数补0
- html怎么引入框架,html文件中引入bootstrap框架
- 区块链与能源互联网的碰撞
- java高效随机生成随机(英文+数字),可自定义
- ios SDWebImage 加载图片流程
- request to https://registry.npm.taobao.org/jsprim failed, reason: connect ETIMEDOUT 错误解决方案