当QTextEdit获得新的撤销项目时,如何收到通知

3
我的小部件包含许多 QTextEdit 控件。实际上,所有这些 QTextEdit 都安装为 QTreeWidget 的项小部件。所有这些控件都可以在原地编辑。
因此,我需要实现一个统一的“撤消堆栈”,在我的小部件中处理 control + "Z/Y" ,而不是每个 QTextEdit 控件。为此,我必须在某个 QTextEdit 创建新的撤销项时进行记录。所以当我按下control+Z,它就会撤消一个 QTextEdit 控件的编辑(通过调用其undo()方法),再次按下可能会撤消另一个 QTextEdit 控件的编辑(通过调用其undo()方法)。
但是在搜索文档时,我发现没有通知我哪个 QTextEdit 制作了新的撤消项的信号。而且,我对 QTextEdit 的撤销策略一无所知,有时多个键按压被压缩成一个单一的撤销项,因此使用按键事件过滤器并记录自己的 QUndoCommand 可能不是一个好主意,更不用说 QTextEdit 提供了其自己方便的 undo()/redo() 方法。
我该如何解决这个问题?

与多个文本编辑控件相关的撤销重做。但我的撤销重做调用可能来自treeItem。 - miguel
抱歉没有表达清楚。我的意思是当用户在我的treeWidget中按下control+Z时,它将逐个撤消每个QTextEdit的线性更改。比如我先更改了textEdit01中的文本,然后更改了textEdit02中的文本,在treeWidget中按下撤消按钮会先撤消textEdit02的更改,然后再撤消textEdit01的更改。 - miguel
你现在能否在任何QTextEdit中执行单个撤销操作? - Tab
它有一个redoAvailable信号,您可以使用它来撤销其他所有的文本编辑。但是我认为直接连接到其他人的撤消将会导致递归调用,因此请尝试一些技巧来使用这个信号。 - Tab
1
重做/撤销可用信号似乎只有在状态从没有撤销项目变为有撤销项目时才会被触发。当然,我可以在任何一个QTextEdit中执行单个撤销操作,但问题是我必须以线性方式撤销多个QTextEdit。 - miguel
1个回答

2
我猜你需要的信号是 QTextDocument::undoCommandAdded

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接