【问题标题】:shared QUndoStack among several QMainWindows?在几个 QMainWindows 之间共享 QUndoStack?
【发布时间】:2011-05-08 05:58:54
【问题描述】:

大家好,

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

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

有什么建议吗? 谢谢

编辑: 在每次创建 QMainWindow 时,我都会按如下方式创建 undo/redo QActions:

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

其中 undoStack 是共享的 QUndoStack 实例。

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

【问题讨论】:

    标签: c++ qt qt4 undo


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗨,是的,QUndoStack 没有父级。在程序执行结束之前,我从不删除 QUndoStack 实例。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-11-16
        • 2016-11-12
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 2021-07-20
        • 2012-01-06
        • 1970-01-01
        相关资源
        最近更新 更多