我正在学习如何将Qt用于我的应用程序开发&我在开发我的应用程序方面取得了相当的成功。现在我想为我的应用程序实现撤销重做功能。该主题的doc几乎没有任何信息。我甚至尝试了解SDK中的两个示例。但是我很难理解它是如何工作的。 有人可以请我解释一下如何实现它吗? 我的应用程序中有各种状态,我想提供此功能。 那么从一般的角度来说,解释是可以的吗? 如果互联网上已经有文章解释相同的话,请通知我。这将是非常有益的。 谢谢。无法理解撤销Qt中的重做框架
回答
有2个核心类:QUndoCommand和QUENDoStack;
- QUndoCommand是您的命令类的基类。你必须自己实现undo()和redo()。
- QUndoStack基本上QUndoCommand对象的容器,用额外的方法,如创建的QAction,查询撤销/重做当前QUndoCommand的文本(你可以很容易地实现自己的简单功能)
你需要做的是:
- 实施您的命令。您需要根据自己的需要决定如何执行重做/撤消操作。类AppendText就是一个很好的例子:http://qt-project.org/doc/qt-5.0/qtwidgets/qundocommand.html
- 为每个文档保留一个QUODStack实例(或者如果应用程序中只有一个文档,则保留一个实例)。
- 假设您有一个“AppendText”命令类,并且在UI中有一个“Append”按钮。如果单击“添加”按钮,则需要创建一个AppendText命令实例,并调用QUndoStack :: push(appendCmd)。 QUENDoStack :: push()将首先调用AppendText :: redo(),然后将其放入容器中以进行撤消。
就是这样。
是的,我理解了一些零碎,但我不明白为什么我会使用Qt撤销重做框架呢? 实现我自己的课程会不会更方便?所有会话历史记录都会根据状态进行撤消/重做? 我想问的是我从Qt的内置框架得到的结果,与我为自己的应用程序定制的自己的框架相比? – 2013-03-03 14:45:26
对于简单的应用程序,qt的撤销框架可以节省大量时间。但是,如果你有更好的解决方案,就去做吧。在qt撤销框架中没有什么神秘的东西可以强制你使用它。 – Chen 2013-03-03 14:54:48
好的谢谢你的帮助。 – 2013-03-03 15:03:51
- 1. 撤销重做与实体框架
- 2. 在WPF中撤销/重做?
- 3. ICSharpCode.TextEditor撤销/重做状态
- 4. 撤销/重做+保存
- 5. 申请撤销重做上
- 6. 撤销/重做在JavaScript
- 7. 在Qt中实现撤销 - 重做功能?
- 8. 在TextArea中实现撤销/重做
- 9. 在jquery中撤销/重做插件
- 10. 在MVC中实现撤销/重做
- 11. 在Eclipse E4中撤销重做
- 12. 重置撤销/重做阵列iOS
- 13. InkCanvas的撤销/重做命令堆栈
- 14. 如何在JavaScript中处理撤销/重做事件?
- 15. 使用链接列表撤销/重做
- 16. 使用MemberwiseClone实现撤销/重做
- 17. C#撤销/重做树木和线程
- 18. JTextPane撤销并重做整个单词
- 19. 使用撤销和重做JTextArea
- 20. 撤销/重做纪念图案c#
- 21. React Native编程撤销/重做
- 22. 草案JS Modifier.ReplaceText撤销/重做错误
- 23. 命令模式撤销/重做:我的方法有何问题?
- 24. 无法撤消,无法在vb6中重做
- 25. C++中的基本QT - 无法理解
- 26. 在富文本框中处理撤消和重做
- 27. 在iPhone中实现撤销重做的最佳实践
- 28. 如何撤销和重做iPhone中的流畅线条?
- 29. 是否有任何库/框架的撤销/重做数据库中的行更改?
- 30. 撤销iOS证书撤销
你不明白什么?具体的课程?概述? – Synxis 2013-03-03 13:58:24
我可以理解4个类和他们的目的是什么,但我不知道如何使用它们,比如说QundoCommand。 – 2013-03-03 14:02:42