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("")
:
我正在使用 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 文本编辑器 - 文本从上次保存更改?的主要内容,如果未能解决你的问题,请参考以下文章
为跨平台文本编辑器应用程序更改 QTextStream 的 QT End of Line Style