Qt5:告诉QPlainTextEdit忽略语法高亮更改
Qt5: Tell QPlainTextEdit to ignore syntax highlighting changes
我的应用程序中有一个QPlainTextEdit
小部件,它有一个QSyntaxHighlighter
分配给它。在文本编辑区域中的每次内容更改时,我都需要获得一个通知(以更新全局应用程序保存/更改状态)。然而,每次荧光笔工作时,信号textChanged()
也会发出,我需要以某种方式过滤掉。
我已经看了modificationChanged()
,但这似乎也不起作用。它忽略了突出显示的更改,并成功地在第一次内容更改时通知我,但不会通知任何后续更改。文档提到,我应该能够用setModified(false)
重置内部状态,但该方法似乎不存在。
关于如何过滤更改有什么想法吗?
我是否必须切换到QTextDocument
,这似乎有一个单一的contentsChanged()
,据说忽略语法突出显示的变化?
原来我已经在正确的轨道上了…只是不是全部:
我确实需要侦听modificationChanged
信号,因为它们是在内容更改时发出的(这是我的应用程序保存状态处理的相关事件)。
setModified(bool)
不存在于QPlainTextEdit
,但我意识到每个对象内部都有一个QTextDocument
,其中有该方法。因此,每次需要将状态重置为未修改状态时,我只需调用它:
m_pPlainTextEdit->document()->setModified(false);
因此,当下次内容更改时,modificationChanged
将再次发出,以便我可以对它做出反应,例如启用"保存"图标。
BTW: QTextDocument
的信号contentsChanged
也在格式更改时发出,因此在我的场景中没有帮助。
我还没有测试过,这基本上只是一个想法。
当用户修改文本时,它是一个QKeyEvent。
当荧光笔这样做时,它是某种QInputMethodEvent (?)
你可以做的是,检查事件是否是QKeyEvent,如果不是,阻塞它。
您可以创建一个过滤器对象类,或者只是在包含QTextEdit的类中定义以下方法。
bool MyClass::eventFilter(QObject *o, QEvent *e)
{
if (e->type() == QKeyEvent) //The user modified the text edit
return false;
else
return true;
}
如果您在包含QTextEdit的类中定义它,则必须安装它(例如在构造函数中):
myTextEdit->installEventFilter(this);
不需要挂接modificationChanged()并每次都重置modified标志,您可以直接挂接textChanged()。它会在任何时候对文档进行更改时触发,而不管之前是否更改过…
- 将鼠标悬停在 GLSL 高亮网格上
- Qt语法高亮显示单行注释的高亮显示规则示例
- 高亮显示图像
- 如何为类C语言创建Visual Studio语法高亮
- 禁用鼠标悬停时ListView行的高亮显示
- 在Windows中,如何使用C++或C#在属于另一进程的窗口中获取高亮显示的文本
- 我正在制作语法高亮笔,但在引号之间为文本着色时遇到问题
- Emacs大括号和大括号高亮显示
- 自定义文本框:高亮显示和选择
- 使用c#或cli/c++在visual studio中的winforms中为图形中的数据点着色或高亮显示
- Mac上的选定对象显示背景高亮显示,而不是边框高亮显示
- QT4.8-对QLineEdit执行高亮显示
- 高亮显示网格c++OpenGL的特定部分
- Qt Creator c++11语法高亮显示通用项目
- Eclipse复制带有语法高亮显示的代码
- c++ Builder XE4 -自动补全和语法错误高亮显示
- 用于c++ 11的Vim语法高亮显示不会混淆其他高亮显示.例如,类/命名空间作用域
- Visual Studio 2013语法高亮显示停止工作
- 如何在Vim中从语法高亮显示中排除c++原始字符串文字
- Qt5:告诉QPlainTextEdit忽略语法高亮更改