QT文本编辑器 - 文本是否从上次保存更改?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT文本编辑器 - 文本是否从上次保存更改?相关的知识,希望对你有一定的参考价值。

我有一个文本编辑器使用QPlainTextEdit与信号modificationChanged(bool)连接到下面显示的插槽,以了解文本何时从上次保存更改:

connect(this, SIGNAL(modificationChanged(bool)), this, SLOT(codeModificationChanged(bool)));

插槽:

void MyEdit::codeModificationChanged(bool change){
    QMessageBox::information(this, tr("Signal"),QString::number(change));
}

文档(http://doc.qt.io/qt-4.8/qplaintextedit.html#modificationChanged)说:

void QPlainTextEdit :: modificationChanged(bool已更改)

只要文档内容以影响修改状态的方式改变,就会发出该信号。如果更改为真,则文档已被修改;否则就是假的。

例如,在文档上调用setModified(false)然后插入文本会导致信号被发出。如果撤消该操作,导致文档返回其原始未修改状态,则信号将再次发出。

我的代码是:

    QMessageBox::information(this, tr("before"),QString::number(document()->isModified()));
    clear();
    QMessageBox::information(this, tr("after"),QString::number(document()->isModified()));

结果:

  • 在msg之前:(显示0 - 文本未修改 - 没问题)
  • clear()(激活插槽,显示1 - 文本修改 - 没问题)
  • 在msg之后:(显示0 - 文本未修改 - 什么?)

如何命令clear()改变修改状态而不向modificationChanged(false)发射信号?实际上信号代码更复杂(改变一些变量,标题栏......),我需要知道何时发生。嗯......不仅clear()命令的行为是这样的,而且还加载空文件或使用setPlainText("")设置空文本。文本的那些“重置”动作仅发出一个信号修改状态=真,然后在没有信号的情况下设置修改状态=假。请记住,使用setModified(bool)更改修改状态始终会为modificationChanged(bool)生成信号。

使用setPlainText(" ")的结果 - 用空格而不是clear()setPlainText("")

  • 在msg之前:(显示0 - 文本未修改 - 没问题)
  • setPlainText(“”)(激活插槽,显示1 - 文本修改 - 没问题)
  • 插槽的新信号(激活插槽,显示0 - 文本未被修改 - 现在可以告诉我QT选择更改修改状态)
  • 在msg后:(显示0 - 文本未修改 - 没问题)

我正在使用QT 5.21。当你设置空文本但是在设置非空文本时告诉我,你认为QT将修改状态更改为false而没有警告吗?如何捕获修改状态的任何变化?

答案

使用:

diconnect(this, SIGNAL(modificationChanged(bool)), this, SLOT(codeModificationChanged(bool)));
clear();
connect(this, SIGNAL(modificationChanged(bool)), this, SLOT(codeModificationChanged(bool)));

以上是关于QT文本编辑器 - 文本是否从上次保存更改?的主要内容,如果未能解决你的问题,请参考以下文章

C# - 上次编辑的文本框未保存到数据库

为跨平台文本编辑器应用程序更改 QTextStream 的 QT End of Line Style

如何在 Android App 中保存最后输入的编辑文本值?

如何从 alertdialog 更改 mainactivity 中的可见性编辑文本

SwiftUI - 检测文本字段中的变化

qt creator源码全方面分析(2-3-1)