时间:2010-11-11 02:41:13

标签: c++ qt qt4 undo

问候所有人,

在我的应用程序中,用户可以打开几个共享相同数据的QWindows。(保存数据,多个视图)我需要在窗口之间使用一个共享的QUndoStack。

撤消/重做工作正常,但当任何一个QWindow关闭时,撤消/重做菜单被禁用。我猜它是因为堆栈被清除。

任何提示? 感谢

编辑: 在每个QMainWindow创建中,我按如下方式创建撤消/重做QActions:

   redoAction=undoStack->createRedoAction(getMainWindow() ,tr("&Redo"));
   undoAction=undoStack->createUndoAction(getMainWindow(), tr("&Undo"));

其中undoStack是共享的QUndoStack实例。

以下是我的应用程序的快照 - http://oi53.tinypic.com/2rfbztg.jpg

3 个答案:

答案 0 :(得分:2)

根据您在窗口之间共享撤消堆栈的原因,您也可以考虑使用QUndoGroup。然后为每个窗口创建单独的堆栈,然后使用QUndoGroup创建组。撤消/重做操作是从组创建的,而不是从堆栈创建的。

答案 1 :(得分:1)

创建没有父级的QUndoStack个实例,并在destructor QWindow中检查它是否是最后一个'QWindow',然后删除QUndoStack个实例。

答案 2 :(得分:0)

只需将当前窗口的指针传递给Qundostack&在重做和重做的帮助下做你想做的事情撤消。