Qt下使用类QUndoStack、QCommands、QUndoGroup等类实现保存用户操作。
保存用户的原理比较容易理解。之前我们所写的用户操作,如鼠标点击后的响应,都是直接写在mouseEvent下的,不能实现保存。现在使用QCommands类将用户操作进行封装,将需要的参数保存起来,在将这些commands放到undoStack中,由undoStack管理这些用户操作的加入、清除、执行下一个等功能。
下面讲讲具体实现步骤:
以用户操作一个dialog消失,与出现的功能为例.
1、在主窗口中添加一个QUndoStack成员变量,并在初始化的时候初始化。
mainwindow.h下:
QUndoStack *m_UndoStack;
mainwindow::mainwindow()下:
m_UndoStack = new QUndoStack(this);
2、剪切掉原来你所写的响应,把响应换成
m_UndoStack->push(new myCommands(dialog,oldT,newT));
//这里oldT,newT分别表示之前窗口的状态,和现在你需要的状态。
3、继承一个QCommands类,重载它的构造函数、undo()、redo()这三个函数。
构造函数的参数要有实现用户操作后响应,需要的所有参数。
myCommands::myCommands(QDialog *dialg,bool oldT,bool newT)
{
m_Dialog = dialog; //将这些数据放在成员变量里
m_oldT = oldT;