Как добавить встроенные аннотации для QTextEdit? - PullRequest
0 голосов
/ 13 сентября 2018

Как я могу добавить встроенные аннотации, как в Qt Creator? Я использую виджет QTextEdit.

Вот скриншот с демонстрацией встроенных аннотаций. inline annotations qt creator

1 Ответ

0 голосов
/ 30 октября 2018

Я думаю ...

Сначала

давай заберем> папу са; аннотация строки.

ожидается ';'

Это сообщение доступно только для чтения. Вы можете поймать целевой блок любым способом.

Например, QTextCursor может искать и перехватывать последний символ, используя метод movePosition с флагом EndOfLine, KeepAnchor.

А если отловленный текст не является ";", вы выдаете такую ​​аннотацию.

QTextEdit всегда имеет QTextDocument объект. Получается методом document().

В этом классе есть метод findBlock().

В любом случае, QTextEdit, QTextDocument, QTextCursor должны использоваться для указания целевых позиций и диапазона ректов.

Поскольку аннотация доступна только для чтения, вы переопределяете метод paintEvent в QTextEdit, и он будет полезен.

И вы делаете объект рисования (QPainter).

Метод рисования имеет drawImage («Изображение всплывающего окна» в первой позиции ») и drawText.

художник имеет setBrush, методы setPen устанавливают красный цвет в QColor()

Вы можете использовать метод cursorRect () QTextEdit и поймать приблизительную верхнюю левую позицию для рендеринга текста, потому что методы DrawImage и DrawText требуют rects для своего аргумента, так что это очень важно. Этот метод cursorRect () можно комбинировать с указателем QTextCursor.

Вы добавляете ширину текстов к ритам после измерения, используя QFontMetrics и т. Д., Это для просмотра всего диапазона предложения аннотации.

Если вы добавите ";" символ для исправления вашего кода, исследуйте строку и удалите аннотацию (вероятно, я думаю, что было бы хорошо переключить флаги для записи или удаления их в операции paintEvent.)

Заранее вам нужно сделать все типы текстов аннотаций (следуя вашему собственному правилу) и спланировать, когда и где они будут использоваться.

...