Tiled源码分析(三): Undo/Redo实现
来源:互联网 发布:数据库营销成功案例 编辑:程序博客网 时间:2024/05/17 21:54
就像之前说过的, 没有Undo/Redo的编辑器都是耍流氓
优点
不过, Qt为我们提供了Undo/Redo的完整框架, 连工具栏按钮和History控件都齐活了
Command模式的核心当然是Command, 就是说所有操作都是QUndoCommand, push进一个QUndoStack就redo, pop一个就是undo
Tiled中比较特别是多文档编辑器, 也就意味着有多个QUndoStack, 所以比我之前写的编辑器多用了个QUndoGroup, 用于切换当前使用的stack
另外, QUndoView就是现成的操作记录控件, 真是省心...
无意中发现了beginMacro/endMacro的调用, 原来一个command序列可以一次性undo/redo, 所谓的:多次修改, 一次回退"
仔细看了下文档, 有一点跟我之前想的不太一样, 判断文件需不需要保存不是看QUndoStack是不是空的, 而是有一个clean state
缺点
由于push需要访问QUndoStack, 而QUndoStack又在MapDocument中, 所以到处都充斥着mMapDocument这样的引用, 所以setMapDocument这样的SLOT到处都是
这个设计我觉得有点冗余, 是可以改进的地方, 还不如直接访问DocumentManager来得简单, 统计由DocumentManager发出documentChanged类似的signal或许更简洁
Command模式比较烦人的就是要实现很多Command, Tiled中也不能免俗, 大约有40多个
QUndoComand中对于对象的生命周期管理也是不太好的地方, 我的做法是使用引用计数和智能指针管理
- Tiled源码分析(三): Undo/Redo实现
- Redo Undo 的三种实现
- 三种undo/Redo的实现
- Undo/Redo设计(三)
- UNDO REDO实现
- Undo/Redo实现
- Undo/Redo框架实现
- 实现Undo/Redo以及格式刷的分析
- redo 和 undo 之三
- Tiled源码分析: 序
- Undo Redo log实现事务
- 命令模式实现 Undo Redo
- 分析生成了多少redo和undo
- undo log与redo log原理分析
- undo log与redo log原理分析
- undo log与redo log原理分析
- undo log与redo log原理分析
- undo log与redo log原理分析
- Eclipse : Maven search dependencies doen't work
- andriod-api翻译(二)--Services
- <c:forEach varStatus="status">中 varStatus的属性简介
- MySQL 体系架构 Oracle体系架构 PostgreSQL体系架构
- CrawlScript语言轻松实现网络爬虫——轻松爬取整站信息
- Tiled源码分析(三): Undo/Redo实现
- Principles of Continuous Integration
- windows下em启动问题
- ZeroMQ阅读笔记
- Java多线程系列--“JUC锁”03之 公平锁(一)
- JAVA深复制与浅复制
- 《C++ Primer》学习笔记1-第一章快速入门
- Leetcode Palindrome Partitioning II
- ForkJoin-任务分拆合并处理器