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

15 篇文章 18 订阅 ¥99.90 ¥99.00

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

开发软件版本

开发软件: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.定义一个命令角色基类 ,定义个请求者角色对象,完成命令模式设计
如: Qt案例 在对QGraphicsView视图修改和撤销修改图元操作时,使用命令模式实现。
8.生成多个命令对象,用于对界面删除图元,新增图元,连线图元等操作的执行与撤销动作
9.通过xml文件格式保存和读取历史流程记录
整个案例软件的功能简单,模块功能分明。充分的展示了项目开发工作中常用的一些功能很值得学习借鉴;
功能图解:
请添加图片描述

Gif运行示例

快捷键说明

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

可执行程序下载

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

源码

下载链接
源码版本:Qt Creator 5.13 | mingw64

在这里插入图片描述

参考案例

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

  • 5
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
### 回答1: QGraphicsViewQt中的视图类,它可以用于显示大量的图形元素。如果要实现时间轴,可以用QGraphicsView来实现。 首先,要创建一个QGraphicsView的实例,并设置一些属性,例如背景颜色、视图大小、滚动条等等。然后,创建一个QGraphicsScene对象,并将它与视图关联起来。QGraphicsScene是一个图形场景,可以用于管理和呈现图形项。 接下来,创建一些图形项来表示时间轴上的不同时间点。可以使用QGraphicsRectItem来创建矩形图形项,并将其放置在场景中的合适位置。可以使用QGraphicsTextItem来添加标签、文字等内容。 为了使时间轴可滚动,需要添加一个滚动条。可以使用QScrollBar或者QGraphicsView自带的滚动条。此外,还可以将时间轴上的不同时间点和滚动条进行联动,即当滚动条滑动时,时间轴上的时间点也会做出相应的改变。 最后,为了增强用户体验,可以考虑添加一些交互效果,例如鼠标悬停时的高亮效果、鼠标点击时的动画效果等等。这些效果可以通过重载QGraphicsItem中的鼠标事件来实现。 总的来说,实现时间轴需要我们借助QGraphicsView和QGraphicsScene这两个类来管理和呈现图形项,同时还需要实现滚动条和交互效果等功能。 ### 回答2: QGraphicsViewQt中用于显示和编辑图形对象的控件,它的功能非常强大,可以实现很多复杂的图形界面效果,包括时间轴的实现。 实现时间轴的关键是要先确定时间线的起点和终点,并在QGraphicsScene中创建对应的时间轴图形对象(如线段、文本标签等),然后将它们添加到QGraphicsView中显示出来。 具体实现步骤如下: 1. 创建QGraphicsScene,设置场景的大小和背景色。在场景中添加表示时间轴的图形对象,比如线段和文本标签。 2. 创建QGraphicsView,设置视图的大小和位置,并关联到QGraphicsScene上。设置滚动和缩放功能,以方便用户查看时间轴。 3. 在QGraphicsView中添加用于控制时间轴的用户界面元素,比如按钮和滑块等,实现调整时间轴的功能。 4. 在程序中添加逻辑代码,实现根据用户输入调整时间轴图形对象位置和文本标签内容的功能,以实现时间轴的动态调整和更新。 需要注意的是,在实现时间轴时要考虑到用户的操作体验和交互性,如何让用户方便操作和快速定位到所需的时间点,是实现时间轴的关键。因此,在设计时间轴界面时要根据实际需求和用户习惯做出合理的调整和优化。 ### 回答3: QGraphicsViewQt框架中用于显示大型可交互的图像、绘图、模拟和数据的控件。利用QGraphicsView可以实现复杂的可视化界面,其中包括了时间轴的实现。 时间轴是一种可视化的工具,用于展示时间序列数据。时间轴通常由一个线性的时间轴和一系列数据点组成,每个数据点都会根据其对应的时间戳被绘制在时间轴上。 使用QGraphicsView实现时间轴需要遵循以下步骤: 1. 创建QGraphicsView实例。 2. 创建QGraphicsScene实例,并将其关联到QGraphicsView。 3. 创建自定义的GraphicsItem类,用于绘制时间轴和数据点。 4. 将自定义的GraphicsItem类添加到QGraphicsScene中。 5. 根据数据生成对应的GraphicsItem,将其添加到QGraphicsScene中。 6. 根据需要,创建QGraphicsView的API接口,实现时间轴的交互功能。 实现时间轴最重要的一步是创建自定义的GraphicsItem类。这个类要负责根据数据绘制时间轴和数据点,同时必须实现诸如拖动、放大、缩小等交互功能QGraphicsView提供了一些常用的交互动作,例如鼠标拖拽、鼠标滚轮缩放、键盘控制等,但是更高级的交互功能需要通过创建自定义的API接口来实现。 总之,使用QGraphicsView实现时间轴需要一定的Qt编程经验,但是只要按照上面提到的步骤进行操作,就能实现一个高效实用的时间轴。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

得鹿梦鱼、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值