【发布时间】: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 吗?如何捕捉修改状态的任何变化?
【问题讨论】: