c – Qt5:告诉QPlainTextEdit忽略语法高亮变化

我的应用程序中有一个QPlainTextEdit小部件,它分配了一个QSyntaxHighlighter.在该文本编辑区域内的每次内容更改后,我需要获得通知(以更新全局应用程序保存/更改状态).但是,每次荧光笔开始工作时,信号textChanged()也会被发出,我需要以某种方式过滤掉.

我已经看过modificationChanged(),但这似乎也没有用.它忽略突出显示的更改,并在第一次更改内容时成功通知我,但不会通知任何后续更改. documentation提到,我应该能够使用setModified(false)重置内部状态,但该方法似乎不存在.

有关如何过滤更改的任何想法?

我是否必须切换到QTextDocument,它似乎只有一个contentChanged()is said忽略语法高亮变化?

最佳答案 事实证明我已经走在了正确的轨道上……并非一直如此:

我确实需要收听modificationChanged信号,因为它们是在内容更改时发出的(这是我的应用程序保存状态处理的相关事件).

然而,我最初没有看到重置内部修改状态的方法(例如,当我的应用程序保存其状态时).原因是QPlainTextEdit不存在setModified(bool),但我意识到每个对象在内部都有一个具有该方法的QTextDocument.所以我只是在每次需要将状态重置为未修改时调用它:

m_pPlainTextEdit->document()->setModified(false);

因此,当下次更改内容时,将再次发出modificationChanged,以便我可以对其做出反应,例如启用“保存”图标.

BTW:格式化更改时也会发出QTextDocument的信号contentsChanged,因此在我的场景中没有用处.

点赞