2010-11-11 36 views
2

全部問候,在幾個QMainWindows中共享QUndoStack?

在我的應用程序中,用戶可以打開幾個共享相同數據的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

回答

2

根據您在窗口之間共享撤消堆棧的原因,您也可以考慮使用QUndoGroup。然後,爲每個窗口創建單獨的堆棧,然後使用QUndoGroup進行組。撤銷/重做操作是從組中創建的,而不是從堆棧創建的。

1

沒有父創建QUndoStack實例,並在QWindow檢查,如果這是最後「QWindow」的destructor然後刪除QUndoStack實例。

+0

嗨,是的QUndoStack沒有parent.And我永遠不會刪除QUndoStack實例,直到程序執行結束。 – 2010-11-11 09:31:18

0

只是將當前窗口的指針傳遞給Qundostack &就像你想要做的那樣,通過重做&撤銷。