gpt4 book ai didi

c++ - 找出QPlainTextEdit的已删除文本

转载 作者:行者123 更新时间:2023-12-01 14:45:08 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

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

    缺点:这意味着大量的内存和CPU占用空间(每次文本更改都会导致完整的字符串复制)。
  • (我认为是更好的选择)在插槽函数实现中,使用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
    }

    关于c++ - 找出QPlainTextEdit的已删除文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24628587/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com