首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Qt: undo框架与QGraphicsScene的正确集成

Qt: undo框架与QGraphicsScene的正确集成
EN

Stack Overflow用户
提问于 2013-01-31 16:57:25
回答 1查看 1.1K关注 0票数 6

我正在写一个Qt应用程序,它基于QGraphicsScene画布,上面有可移动的形状,我试图集成撤消-重做功能。对于像创建和删除形状这样的大多数功能,在QGraphicsScene本身上实现是相当琐碎的,但我希望元素是可移动的,并且移动是可撤消的。现在,我在场景中使用橡皮筋拖动模式,并在项目上使用ItemIsSelectableItemIsMovable标志。问题是似乎没有合适的地方来创建表示形状移动的QUndoCommand。如果我在QGraphicsScene::itemChange方法中这样做,那么选择并移动两个或多个形状会导致不同对象的单独撤消命令交错,因此无法合并,因此撤消会导致意外的行为。在我可以看到的QGraphicsScene中,当它的项被移动时,没有事件被调用,所以我有点卡住了。

我看到的最糟糕的情况是,我禁用了自定义QGraphicsItem对象上的ItemIsMovable标志,并完全在QGraphicsScene鼠标事件中处理移动,但重新正确地实现该功能似乎相当复杂(我在内部检查了Qt是如何做到这一点的,并且有相当多的代码用于处理复杂的情况,例如对象及其一些子对象都被选中的情况)。这似乎是undo堆栈最明显的用例(以至于undo框架的示例程序与我的QGraphicsScene程序非常相似,只是不支持多对象移动),所以如果不重新实现核心功能的重要部分,就没有内置的方法来完成它,这似乎很奇怪。有没有人有这样做的程序的见解或例子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-31 20:14:47

我想我解决这个问题有点笨拙。我向自定义形状添加了一个preMovePoint属性,在QGraphicsScenemousePressedEvent中,我将每个选定形状的preMovePoint设置为其各自的当前位置,在mouseReleaseEvent中,创建了一个从preMovePoint到每个形状的当前pos的复合移动命令。我仍然有兴趣知道是否有更好的方法。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14631098

复制
相关文章
qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果
应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm
全栈程序员站长
2022/07/12
1.8K0
qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果
9.5 QGraphicsView视图框架
Qt Graphics View 用于管理交互大量定制的 2D 图形对象,提供了可视化显示对象的视图 widget,并支持缩放和旋转功能。Graphics View 使用 BSP(二元空间划分)树形,可非常快速地找到图元对象,因此即使是包含百万个图元对象的大型场景,也能实时显示。Graphics View框架包含了一个事件传播构架,允许与场景中的图元进行交互。比如:可以处理键盘事件,鼠标移动、松开、双击事件,并且可以跟踪鼠标移动。Graphics View视图本身是一个基于item的M-V架构的框架,它的每一个组件都是一个item。
DS小龙哥
2022/01/12
6240
9.5 QGraphicsView视图框架
【QT】图形视图、动画框架
Qt提供了图形视图框架(GraphicsView Framework)、动画框架(The Animation Framework)、状态机框架(The State Machine Framework)来实现更加高级的图形与动画应用。使用这些框架可以快速设计出动态GUI应用和各种动画、游戏程序。
半生瓜的blog
2023/05/13
1.6K0
【QT】图形视图、动画框架
正确使用Qt多线程
摘要: run()是线程的入口,就像main()对于应用程序的作用。QThread中对run()的默认实现调用了exec(),从而创建一个QEventLoop对象,由其处理该线程事件队列(每一个线程都有一个属于自己的事件队列)中的事件。
杨永贞
2020/08/04
1.4K0
qt没有被正确安装_qt软件安装步骤
对于Qt的初学者来说,Qt有很多不熟悉的地方,安装和使用时,都会遇到各种各样的“坑”。这些坑,如果经历过一次,就会发现其实是很简单的问题。但是如果不熟悉,那么可能折腾很久也没解决。因此我把我自己遇到的(也是后来常常被问到的)一些问题放在这里,供大家参考、讨论。
全栈程序员站长
2022/09/19
4.2K0
qt没有被正确安装_qt软件安装步骤
QT入门10个小demo——MP4视频播放器
学完qt好几个月了,一直没做相关的项目巩固,这次分享10个qt相关的小项目来练练手。
秋名山码神
2023/10/16
2.2K0
QT入门10个小demo——MP4视频播放器
让Python画出心目中的自己
本文作者李秋键,AI科技大本营出品 引言:人脸图像的生成在各个行业有着重要应用,例如刑事调查、人物设计、教育培训等。然而一幅逼真的人脸肖像,对于职业画家也要至少数小时才能绘制出来;对于从未接触过绘画的新手,就更是难如登天了。新手绘制出来的人脸草图往往非常简陋抽象,甚至有不匀称、不完整。但如果使用智能人脸画板,无疑是有如神助。 本项目主要来源于中科院和香港城市大学的一项研究DeepFaceDrawing,论文标题是DeepFaceDrawing: DeepGeneration of Face Images f
博文视点Broadview
2023/05/19
2740
让Python画出心目中的自己
用Python画出心目中的自己
本项目主要来源于中科院和香港城市大学的一项研究DeepFaceDrawing,论文标题是《DeepFaceDrawing: DeepGeneration of Face Images from Sketches》
博文视点Broadview
2020/11/30
5430
用Python画出心目中的自己
关于 Oracle redo与undo 的认识
redo也就是重做日志文件(redo log file),Oracle维护着两类重做日志文件:在线(online)重做日志文件和归档(archived)重做日志文件。这两类重做日志文件都用于恢复;其主要目的是,万一实例失败或介质失败,它们能够恢复数据。
星哥玩云
2022/08/17
2.3K1
QT应用编程: QGraphicsView+QGraphicsTextItem动态编辑文本
QGraphicsView+QGraphicsTextItem 实现在画布上动态输入,编辑文本。 类似于截图软件、图片编辑器加文字水印的效果。 比如: 类似于windows系统自带的图片编辑器这个效果。
DS小龙哥
2022/01/07
3.4K1
QT应用编程: QGraphicsView+QGraphicsTextItem动态编辑文本
Qt识别文件类型的正确姿势
  一般识别图片类型方法: 虽然这一方法可以实现识别图片类型,但是维护起来相对困难。如果真的要识别所有的文件是否是图片类型,还需要添加更多的判断方法。
Qt君
2019/08/09
2.1K0
QT应用编程: 解决QGraphicsScene重写鼠标事件无法直接得到鼠标坐标问题
重载QGraphicsScene相关的鼠标事件,想得到当前鼠标的坐标点,如果直接从mouseEvent取坐标,返回的坐标点全是0。
DS小龙哥
2022/01/07
1.5K0
QT应用编程: 解决QGraphicsScene重写鼠标事件无法直接得到鼠标坐标问题
QT应用编程: QGraphicsView绘制图片作为背景
使用指定的图片作为QGraphicsView视图窗口的背景,并消除图元拖动时产生的残影。 思路: 派生QGraphicsScene类,重写drawBackground函数。
DS小龙哥
2022/01/07
2.5K0
QT应用编程: QGraphicsView绘制图片作为背景
Qt框架简介
截止至2020年8月,Qt的最新版本是5.15.0,但仍有很多资料是基于Qt4,为了避免大家误入歧途,所以写了这篇文章。
全栈程序员站长
2022/08/29
5.2K0
Qt框架简介
Shiro框架学习,Shiro与Spring集成
Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。
用户1289394
2021/04/20
6650
Shiro框架学习,Shiro与Spring集成
Spring如何与Tomcat框架进行集成
本节我们讲究如何利用Tomcat的ContextLoaderListener扩展接口来把Spring框架与Tomcat进行连接起来。
田维常
2019/07/31
2.6K0
Spring如何与Tomcat框架进行集成
无法启动 Maya 集成的 qt des
  Maya 集成了 PySide,同时集成了qt designer,在 Maya 的安装目录下的 bin 文件夹中可以找到 designer.exe。
py3study
2020/01/19
1.1K0
Shiro框架学习,Shiro与Web集成
此处我们使用了jetty-maven-plugin和tomcat7-maven-plugin插件;这样可以直接使用“mvn jetty:run”或“mvn tomcat7:run”直接运行webapp了。然后通过URLhttp://localhost:8080/chapter7/访问即可。
用户1289394
2021/04/20
1.2K0
Shiro框架学习,Shiro与Web集成
MySQL redo与undo日志解析
前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍。相对于其他几种日志而言, redo log 和 undo log 是更加神秘,难以观测的。本篇文章将主要介绍这两类事务日志的作用及运维方法。
码农架构
2021/03/21
6240
详解MySQL的Redo日志与Undo日志
本文分两部分, 第一部分概念介绍,重在理解。 第二部分通过MySQL Innodb中的具体实现,加深相关知识的印象。 本文的原意是一篇个人学习笔记,为了避免成为草草记录一下的流水账,尝试从给人介绍的角度开写。但在整理的过程中,越来越感觉力不从心,一是细节太多了,原以为足够了解的一个小知识点下可能隐藏了很多细节;二是内容与范围的取舍,既想有点技术性避免空谈,又不想陷入枯燥冗长的小细节描述。几番折腾,目前的想法把坑填上,能写完就不错了,你读起来有不顺或错误的地方请见谅,欢迎反馈。
Bug开发工程师
2020/02/12
2.2K0
详解MySQL的Redo日志与Undo日志

相似问题

QT QGraphicsScene与QLabel和QPixmap

12

QT - QGraphicsScene不能正确显示(z-buffer?)

13

Qt QGraphicsScene副本

23

Qt QGraphicsScene原点

31

理解Qt中的QGraphicsScene

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文