我正在使用QUndoStack (http://qt-project.org/doc/qt-4.8/qundo.html),我想在QUndoStack上显式地调用撤销()和redo()。我查找了Qt文档,并搜索是否支持它,但找不到任何东西。所以,我去做了。
结果--对撤销()的显式调用运行良好。此后,canRedo()返回true。对redo()的后续调用不会输入我定义的任何redo()函数。
请对此提供一些见解。如果我需要分享更多信息,请告诉我。谢谢!
发布于 2014-04-15 08:28:26
似乎像预期的那样起作用,并记录在案。注意,将命令推到堆栈总是会调用命令对象上的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: falsehttps://stackoverflow.com/questions/23076069
复制相似问题