找出QPlainTextEdit的已删除文本

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

每当文档内容更改时,都会发出此信号。例如,当插入或删除文本或应用格式时。

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

我想找出QPlainTextEdit的已删除文本。有什么办法可以做到这一点?

古奇

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

  1. 在每次内容更改后都存储文档的内容,因此在每次下一次更改中,您都可以访问先前的内容,并且可以使用positioncharsRemoved提取值

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

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

  2. (我认为是更好的方法)在slot函数实现中,使用的undo()redo()方法在QPlainTextEdit查询charsRemoved时还原先前的内容请注意,调用undo()redo() 不会触发contentsChange()信号(我刚刚对其进行了测试),因此就这么简单。

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

    缺点:这仅在启用“撤消/重做”机制(默认情况下)时才有效,并且还可能影响您使用或覆盖的任何撤消/重做代码(通常不是这种情况)。

为了清楚起见,为解决方案2剪切了一个示例代码:

void MainWindow::textChanged(int pos, int rem, int add)
{
    ui->plainTextEdit->undo();
    qDebug() << ui->plainTextEdit->document()->toPlainText().mid(pos, rem); // <- text removed
    ui->plainTextEdit->redo();
    qDebug() << ui->plainTextEdit->document()->toPlainText().mid(pos, add); // <- text added
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在JTextPane中查找已删除的文本

来自分类Dev

在JTextPane中查找已删除的文本

来自分类Dev

仅打印QPlainTextEdit文档纯文本

来自分类Dev

如何允许用户删除Console.ReadLine()已读取的文本;

来自分类Dev

恢复已删除的文本文件内容

来自分类Dev

如何在Vim中恢复已删除的文本

来自分类Dev

从R中的已处理文本中删除标签

来自分类Dev

Discord.py | 无论如何,让机器人找出它已发送的嵌入内容并将其全部删除?

来自分类Dev

列表框添加项已删除,但文本框项未删除

来自分类Dev

找出删除和更新的行

来自分类Dev

找出删除和更新的行

来自分类Dev

QPlainTextEdit认为如果文本为空则已被修改

来自分类Dev

如何删除QPlainTextEdit及其内容之间的空间

来自分类Dev

如何删除QPlainTextEdit及其内容之间的空间

来自分类Dev

找出文件行是否已排序

来自分类Dev

找出ADempiere中已登录的用户

来自分类Dev

找出文件行是否已排序

来自分类Dev

找出ADempiere中已登录的用户

来自分类Dev

如何找出已安装的GCC工具链?

来自分类Dev

写入文本并删除已写入的内容后,按回车键执行程序

来自分类Dev

如何恢复在vim中仍然打开的已删除文本文件?

来自分类Dev

删除...输出计数(已删除。*)

来自分类Dev

更新已删除的应用

来自分类Dev

恢复已删除的文件

来自分类Dev

阵列已删除或损坏

来自分类Dev

Android应用已删除

来自分类Dev

删除已包含的元素

来自分类Dev

从已删除的目录撤退

来自分类Dev

GitHub提交已删除