QUndoStack, QUndoCommand实现链表编辑撤消重做
·
欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。
qt撤消重做框架
qt的撤消重做是基于命令设计模型来做的。
提供了一个QUndoCommand,需要具体执行类实现redo, undo方法。
每次执行时,将执行的操作组织成命令放到QUndoStack中进行提交,放入后会自动执行redo方法。
当要撤消时会执行栈顶元素的undo方法, 并将命令移动到另一个栈。
链表命令设计
class CommandAdd : public QUndoCommand
{
public:
CommandAdd(Node *a, Node *b, QUndoCommand *parent = nullptr)
: QUndoCommand(parent), pre(a), cur(b) {}
void undo() override
{
pre->next=cur->next;
cur->next=NULL;
}
void redo() override
{
cur->next=pre->next;
pre->next=cur;
}
private:
Node *pre, *cur;
};
class CommandDel : public QUndoCommand
{
public:
CommandDel(Node *a, Node *b, QUndoCommand *parent = nullptr)
: QUndoCommand(parent), pre(a), cur(b) {}
void undo() override
{
cur->next=pre->next;
pre->next=cur;
}
void redo() override
{
pre->next=cur->next;
cur->next=NULL;
}
private:
Node *pre, *cur;
};
实现效果
代码库:https://gitcode.com/chenbb1989/geometric_model/tree/master/listundoredo
链表撤消重做
更多推荐


所有评论(0)