欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。

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

链表撤消重做

更多推荐