C++ QTextDocument::contentChange() 信号提供无效的输入数据

C++ QTextDocument::contentsChange() signal provides invalid input data

本文关键字:无效 输入 数据 信号 QTextDocument contentChange C++      更新时间:2023-10-16

我目前正在为我的大学班级开发一个简单的oline纯文本编辑器。我使用QTextDocument::contentsChange(index, charsRemoved, charsAdded)信号来确定QPlainTextEdit对文档所做的更改,并将它们发送到服务器。 但有时参数、charsRemovedcharsAdded给出无效值。

例如,当我在编辑器文本中间插入带有 Ctrl+V 的文本时,会报告正确的字符添加信息(charsRemoved == 0 && charsAdded == <inserted_text_length>(。但是,如果我在第零个索引中插入文本,就在第一个字符之前,则会给出无效数据(charsRemoved == <previous_editors_text_size> + 1 && charsAdded == <new_editors_text_size> + 1(。但是,如果我通过键盘键入单个字符,并且光标位于编辑器的开头,则信号会正确报告报告charsRemoved == 0 && charsAdded == 1

此外,当我通过按 Ctrl+Shift 更改文本输入语言时,或者当我使用 Alt+Tab 时光标放置在窗口中的任何位置QPlainTextEdit时, 然后发出两次信号QTextDocument::contentsChange(),并报告charsRemoved == <current_editors_text_size> + 1 && charsAdded == <previous_editors_text_size>

这是一个错误还是其他我如何处理这个问题?

看起来这个错误从qt 4开始就被报告了,但从未得到修复。 我能找到的最新错误报告是这个。

对于双重信号发射,请考虑此信号应用于报告文本内容和格式的变化。因此,也许这些键组合会触发两个信号,一个用于文本,一个用于输入模式的更改。但这只是我的假设。