Qt自带案例:

F:\Qt\Qt5.12.8\Examples\Qt-5.12.8\widgets\tools\undoframework

https://doc.qt.io/qt-5/qundocommand.html

它山之石:

Qt QUndoStack、QUndoCommand(实现撤回和回撤)

https://www.cnblogs.com/ybqjymy/p/12836278.html

Qt自带案例:F:\Qt\Qt5.12.8\Examples\Qt-5.12.8\widgets\tools\undoframeworkhttps://doc.qt.io/qt-5/qundocommand.html它山之石:Qt QUndoStack、QUndoCommand(实现撤回和回撤)https://www.cnblogs.com/ybqjymy/p/12836278.html
一般的情况下有工具栏的都用QMainWindow作为基类,但是我不想用QMainWindos做基类,我只是想使用其中的 QT oolButton和StatusBar,所以用QWidget做基类 QT oolButton添加到ToolBar后它本身的一些属性就不能用了,我向 实现 有外围设备插入后在工具栏显示图标,设备移除后图标也相应的移除,如果哦是用QAction还好弄,只要用QAction的函数
使用 Qt 的时候,有时需要 撤销 修改的代码,但可能回撤过头了,又不知道前一步修改了什么,这时候就比较麻烦了。下面提供2个快捷键,当 撤销 过头时,可恢复 撤销 内容。 撤销 的快捷键是 Ctrl+Z 恢复/向前的快捷键是 Ctrl+Shift+Z 很多软件中,都有Ctrl-Z撤回的操作,例如visio、Word等一些编辑器。在使用软件的时候,难免会有手误操作,例如,我码了一堆的字,想全选-复制,结果全选- 删除 了,还没有保存,如果没有撤回 功能 的话,字就白码了,还得重复一遍,所以软件有回撤 功能 是挺方便的。 二、 Qt 中的回撤栈 1、QUndoCommand表示对文档的单个编辑操作。例如,在文本编辑器中插入或 删除 文本块。QUndoCommand可以使用redo()将更改应用于文档,并使用undo()撤消更改。这些 功能 实现 必须在派生类中提供。如: 2、QUndoCommand对象由它们被压入的堆栈所拥有。如果命令已被撤消并且推送了新命令,则QUndoStack会 删除 该命令。例如: MyCommand *command1 = new MyCommand(); stack->push(command1);