Сигнал C ++ QTextDocument :: contentsChange () предоставляет неверные входные данные - PullRequest
0 голосов
/ 02 июня 2018

В настоящее время я разрабатываю простой текстовый редактор oline для моего университетского класса.Я использую сигнал QTextDocument::contentsChange(index, charsRemoved, charsAdded), чтобы определить изменения, внесенные в документ по QPlainTextEdit, и отправить их на сервер.Но иногда аргументы charsRemoved и charsAdded дают недопустимые значения.

Например, когда я вставляю текст с Ctrl + V в середине текста редактора, тогда сообщается правильная информация charsAdded (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>

Это ошибка или иным образом, как я могусправиться с этой проблемой?

1 Ответ

0 голосов
/ 03 июня 2018

Похоже, что об этой ошибке сообщалось с qt 4, но она не была исправлена.Самый последний отчет об ошибках, который я смог найти, это этот .

. Для двойного излучения сигнала учтите, что этот сигнал должен использоваться для сообщения об изменениях как текстового содержимого, так и формата.Поэтому, возможно, эти комбинации клавиш запускают два сигнала, один раз для текста и один раз для изменения режима ввода.Но это только мое предположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...