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

Posted

技术标签:

【中文标题】QT 文本编辑器 - 文本从上次保存更改?【英文标题】:QT Text editor - Text is changed from last save? 【发布时间】:2016-07-05 22:27:34 【问题描述】:

我有一个使用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 changed)

只要文档内容发生变化,就会发出这个信号 一种影响修改状态的方式。如果更改为真,则 文件已被修改;否则为假。

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

我的代码是:

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

结果:

之前消息:(显示 0 - 文本未修改 - 可以) clear()(激活槽,显示 1 - 文本已修改 - 可以) 之后消息:(显示 0 - 文本未修改 - 什么?)

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

使用setPlainText(" ") 的结果 - 用空格代替clear()setPlainText("")

之前消息:(显示 0 - 文本未修改 - 可以) setPlainText(" ")(激活槽,显示 1 - 文本已修改 - 可以) 新信号到槽(激活槽,显示 0 - 文本未修改 - 现在可以告诉我 QT 选择更改修改状态) 之后消息:(显示 0 - 文本未修改 - 可以)

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

【问题讨论】:

【参考方案1】:

用途:

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

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

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

保存在 webView 中呈现的可编辑文本

QSettings保存程序设置