Название: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: xintrea от Июнь 16, 2009, 21:33 Здравствуйте!
Хочется вот чего - в QTextEdit сделать возможным показывать пробелы (в виде точечек), табы (в виде стрелочек), переводы строк (в виде пи). Вопрос - возможно ли такое, с какой стороны подступиться? Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: xintrea от Июнь 17, 2009, 21:11 Таки никто не знает?
Я смутно представляю как вообще работает QTextEdit, и как достучаться до отрисовки глифов. Поэтому вот такой путь хочу попробовать. Разобъём задачу на этапы. Для простоты примем, что нам поверх пробелов надо рисовать точечки. 1. Надо пробежать по видимой области текста, и выдернуть все позиции курсора, где есть пробелы. Как это сделать? 2. Преобразовать позиции курсора в координаты. Как это сделать? 3. По полученным координатам с каким-то смещением нарисовать точечки. С этим вопросов нет. Что можно сказать по пункту 1 и 2? Реально ли такую инфу вытянуть из QTextEdit? Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: Авварон от Июнь 17, 2009, 21:20 глянь исходники... сдается мне надо paintEvent переопределять
Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: xintrea от Июнь 17, 2009, 21:36 глянь исходники... сдается мне надо paintEvent переопределять Это когда пункт 3 буду делать. Сейчас непонятки с пунктом 1 и 2. Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: Авварон от Июнь 17, 2009, 22:32 я к тому что просто можно скопировать код родной отрисовки и дописать свой код (то бишь не перерисовывать а именно рисовать)
Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: spectre71 от Июнь 17, 2009, 23:09 Если ничего не откопаешь готового в QTextDocument, QTextFormat, ... ...
То можно наследовать QTextDocument и сделать свое форматирование. Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: xintrea от Июнь 17, 2009, 23:13 Ну я уже посмотрел, как в Kate отрисовка табов сделана.
Анализ исходников Kate показал, что QTextEdit там и не пахло. В Kate область редактирования практически с нуля написана, отрисовывается всё по строкам (функция paintTextLine(). В момент отрисовки идёт посимвольный анализ, и на месте табов рисуются уголочки, если это задано в настройках. Теперь осталось понять, реально ли механизмом наследования изменить QTextEdit так, чтоб он нужные глифы отрисовывал как мне нужно, или это невозможно впринципе. Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: mugabe от Июнь 18, 2009, 07:28 я к тому что просто можно скопировать код родной отрисовки и дописать свой код (то бишь не перерисовывать а именно рисовать) "просто скопировать" на самом деле не очень просто. Там оооочень много спрятано в QTextEdit_private, к которому у наследника нет доступа (хоть его и можно получить).Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: xintrea от Июнь 18, 2009, 12:30 Вот посоветовали такой код, довольно просто, и почти то что нужно
Код: void TextEdit::paintEvent( QPaintEvent * e ) { Остался вопрос - как пробегать не весь документ, а только ту часть, которая видна на экране? Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: xintrea от Июнь 18, 2009, 14:55 Блин, ну видел же, что есть у какого-то объекта, толи у QTextCursor, толи у QTextDocument, метод типа isVisible()... Как-то определялось - скрылся курсор за пределы области редактирования или нет... Щас ищу - не могу найти.
Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: xintrea от Июнь 18, 2009, 15:35 Ага, нашел что я видел
void QTextEdit::ensureCursorVisible () но этот метод именно области редактирования, а не курсора. И он ничего не возвращает, а выполняет действие - переносит прокрутку так, чтобы курсор становился виден... Название: Re: QTextEdit - как показать невидимые символы (пробелы, табы, переводы строк) Отправлено: xintrea от Июнь 18, 2009, 23:31 В общем, лазил-лазил по документации, и метода, который бы устанавливал курсор на начало видимой области текста не нашел.
Но, так как мы можем для любой позиции курсора определить координаты курсора относительно видимой области, то применив метод бисекций можно достаточно быстро найти позицию курсора, с которой начинается видимый текст. Получился такой код (отрисовывает точки на месте пробелов) Код: void EditorTextArea::paintEvent(QPaintEvent *event) Такой метод отрисовки работает в разы быстрее "прямого" метода, который я выше написал (который рисовал точки для всех пробелов, даже для невидимых). Примерный расчет такой - на 5000 символов для определения начала области видимости текста тратится максимум 12 итераций. Код: Document lenght 4994 Незнаю, может это и велосипед получился. Но по поводу установки курсора в Qt на начало видимого текста, в интернетах информации не нашел. |