void QTextDocument::contentsChange(int position, int charsRemoved, int charsAdded) [signal]
只要文档内容发生变化,就会发出此信号;例如,插入或删除文本时,或应用格式时。
用户可以单击剪切/按删除/退格键或任何其他方式并删除文本。 问题是在删除文本后发出此信号。所以我不知道哪个文本被删除了。现在的位置和charsRemoved是没用的。
我想找出QPlainTextEdit的已删除文本。有没有办法实现这个目标?
答案 0 :(得分:1)
我看到了两种可能的解决方案:
在每次更改内容后存储文档的内容,因此在每次下一次更改时,您都可以访问以前的内容,并且您将能够使用位置和<提取值EM> charsRemoved
优点:它是隔离机制,不会干扰任何其他信号或插槽。
缺点:这意味着显着的内存和CPU占用空间(每次文本更改都会导致完整的字符串副本)。
(在我看来更好)在插槽函数实现中使用undo()
的{{1}}和redo()
方法来恢复以前查询时的内容< EM> charsRemoved 。请注意,调用QPlainTextEdit
和undo()
不会触发redo()
信号(我刚测试过),所以就这么简单。
优点:不会导致额外的内存占用。不确定CPU占用空间,但我认为在这种情况下它也更好。
缺点:这只适用于启用 Undo / Redo 机制(默认情况下),它也可能会影响您使用的任何撤消/重做代码或覆盖(通常情况并非如此)。
为清楚起见,针对解决方案2剪切了示例代码:
contentsChange()
答案 1 :(得分:1)
Googie建议调用undo
和redo
的诀窍很不错,为了提高效率,可以使用QTextCursor
提取文本而不是调用{{1} }:
toPlainText