在Qt Undo Framework下明确调用redo()

时间:2014-04-15 06:25:47

标签: c++ qt undo-redo

我正在使用Qt Undo Framework(http://qt-project.org/doc/qt-4.8/qundo.html),我想在QUndoStack上显式调用undo()和redo()。我查阅了Qt文档并搜索了是否支持,但找不到任何内容。所以,我继续做了。

结果 - 对undo()的显式调用工作正常。之后canRedo()返回true。随后对redo()的调用不会进入我定义的任何redo()函数。

请提供一些有关此问题的见解。如果我需要分享更多信息,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

似乎按预期工作并记录在案。请注意,将命令推送到堆栈将始终在命令对象上调用redo()。

class DummyCmd : public QUndoCommand
{
public:
    DummyCmd()
        : QUndoCommand(){ qDebug() << "DummyCmd c-tor"; }
    virtual void undo()
        { qDebug() << "undo"; }
    virtual void redo()
        { qDebug() << "redo"; }
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    DummyCmd c1;
    QUndoStack s;
    qDebug() << "pushing to stack";
    s.push(&c1);
    qDebug() << "calling undo";
    s.undo();
    qDebug() << "canRedo after undo: " << s.canRedo();
    s.redo();
    qDebug() << "canRedo after redo: " << s.canRedo();

    return a.exec();
}

输出:

DummyCmd c-tor
pushing to stack
redo
calling undo
undo
canRedo after undo:  true
redo
canRedo after redo:  false