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

时间:2016-07-05 22:27:34

标签: c++ 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 而没有警告吗?如何识别修改状态的任何变化?

1 个答案:

答案 0 :(得分:0)

使用:

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