Я думаю ...
Сначала
давай заберем> папу са; аннотация строки.
ожидается ';'
Это сообщение доступно только для чтения.
Вы можете поймать целевой блок любым способом.
Например,
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.)
Заранее вам нужно сделать все типы текстов аннотаций (следуя вашему собственному правилу) и спланировать, когда и где они будут использоваться.