QTextCursor и подсветка текста в QPlainTextEdit, непонятное поведение при выделении текста |
Здравствуйте, гость ( Вход | Регистрация )
QTextCursor и подсветка текста в QPlainTextEdit, непонятное поведение при выделении текста |
Kroll |
17.11.2015, 7:24
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 7.12.2011 Пользователь №: 3049 Спасибо сказали: 0 раз(а) Репутация: 0 |
В QWidget засунут QPlainTextEdit с текстом внутри. ReadOnly. Так же рядом есть спинбокс с диапазоном длинны строки текста загруженного в QPlainTextEdit.
Мышью кручу спинбокс и от этого единственный символ выделенный инверсивным цветом ездит туда сюда. Это нормальное задуманное поведение, которое реализовано соединением спинбокса с вот таким слотом в основном виджете:
textCursor создан в конструкторе базового виджета:
То есть у plainTextEdit остаётся и свой курсор отдельно. QTextCharFormat charFormat тоже отдельный для инверсивного выделения, а родным я делаю сброс выделения на обычные цвета. Собственно проблема: Всё работает как задумано ровно до того момента, когда я ткну мышью в текст. И как только рабочий курсор с выделением доезжает до этой позиции, то выделение перестаёт стираться и красит всё, где побывает курсор. Если при этом ткнуть мышью в новое ещё не закрашенное место текста, то курсор с выделением начинает затирать всё после себя пока снова не дойдёт до нового места, куда я ткнул мышью и стирание опять исчезнет. Если текст весь закрасился, то нормальное поведение востановить не получается. Каким образом не используемый мной в алгоритме подсветки родной курсор вмешивается в его работу? Qt 4.8.4 |
|
|
lanz |
17.11.2015, 9:30
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
На вскидку
Возвращает charFormat в позиции родного курсора. Поэтому когда выделение доезжает до этого места то
не стирает выделение, а получает *charFormat. Что из этого следует надо еще подумать. Смысл в том что charFormat не связан с курсором, это общие данные, которые используют оба курсора, отсюда и перемешивание. |
|
|
Kroll |
17.11.2015, 10:05
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 7.12.2011 Пользователь №: 3049 Спасибо сказали: 0 раз(а) Репутация: 0 |
Смысл понял. После покраски поверх родного курсора родной чар формат возвращает всё время тот цвет, который на этот момент остаётся повех курсора. Получается, что вместо стирания идёт двойная покраска пока курсор находится в крашенной позиии, а как только я его в некрашенную ещё позицию передвигаю то идёт возврат цвета который там.
Странно, я думал это фиксированный чар формат по умолчанию и меняется только вручную. Ну буду тогда хранить отдельно и умолчальный формат. |
|
|
Текстовая версия | Сейчас: 26.11.2024, 1:29 |