找出QPlainTextEdit的已删除文本

时间:2014-07-08 09:42:54

标签: c++ qt qt5 qt5.1

void QTextDocument::contentsChange(int position, int charsRemoved, int charsAdded) [signal]

只要文档内容发生变化,就会发出此信号;例如,插入或删除文本时,或应用格式时。

用户可以单击剪切/按删除/退格键或任何其他方式并删除文本。 问题是在删除文本后发出此信号。所以我不知道哪个文本被删除了。现在的位置和charsRemoved是没用的。

我想找出QPlainTextEdit的已删除文本。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

我看到了两种可能的解决方案:

  1. 在每次更改内容后存储文档的内容,因此在每次下一次更改时,您都可以访问以前的内容,并且您将能够使用位置和<提取值EM> charsRemoved

    优点:它是隔离机制,不会干扰任何其他信号或插槽。

    缺点:这意味着显着的内存和CPU占用空间(每次文本更改都会导致完整的字符串副本)。

  2. (在我看来更好)在插槽函数实现中使用undo()的{​​{1}}和redo()方法来恢复以前查询时的内容< EM> charsRemoved 。请注意,调用QPlainTextEditundo() 不会触发redo()信号(我刚测试过),所以就这么简单。

    优点:不会导致额外的内存占用。不确定CPU占用空间,但我认为在这种情况下它也更好。

    缺点:这只适用于启用 Undo / Redo 机制(默认情况下),它也可能会影响您使用的任何撤消/重做代码或覆盖(通常情况并非如此)。

  3. 为清楚起见,针对解决方案2剪切了示例代码:

    contentsChange()

答案 1 :(得分:1)

Googie建议调用undoredo的诀窍很不错,为了提高效率,可以使用QTextCursor提取文本而不是调用{{1} }:

toPlainText