问候所有人,
在我的应用程序中,用户可以打开几个共享相同数据的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
答案 0 :(得分:2)
根据您在窗口之间共享撤消堆栈的原因,您也可以考虑使用QUndoGroup。然后为每个窗口创建单独的堆栈,然后使用QUndoGroup创建组。撤消/重做操作是从组创建的,而不是从堆栈创建的。
答案 1 :(得分:1)
创建没有父级的QUndoStack
个实例,并在destructor
QWindow
中检查它是否是最后一个'QWindow',然后删除QUndoStack
个实例。
答案 2 :(得分:0)
只需将当前窗口的指针传递给Qundostack&在重做和重做的帮助下做你想做的事情撤消。