Собираем
информацию
по крупицам
Новости


Новости

Почему я сам рисую символы форматирования в QTextEdit
07-02-2016
00:03:28

Программа MyTetra, написанная с помощью фреймверка Qt, имеет пятилетнюю историю. Когда шла фаза начальной разработки,  решался один животрепещущий вопрос: как отображать в тексте символы форматирования, так же, как это происходит в Open/Libre Office при нажатии кнопки с закорючкой, похожей на букву Пи. Готовых инструментов в Qt на тот момент не было, и пришлось дописывать этот функционал путем рисования самодельных изображений символов форматирования поверх текста.

 

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

 

Три года назад в Qt появился функционал, позволяющий рисовать символы форматирования. У документа, отрисовывающегося через QTextEdit появились опции отображения символов форматирования. Об этом мне сообщил некто Squarero. Так как функционал был новый, а я пользуюсь библиотеками в консервативном стиле (иначе пользователи не смогут даже запустить мою программу), то я не мог его даже проверить. А сейчас как раз дошли руки до того, чтобы убрать вынужденное уродство из кода, и заменить его парой готовых команд.

 

Вот как выглядит работа с символами форматирования в Qt:

 

// Показать символы форматирования

QTextOption option = document()->defaultTextOption();
option.setFlags(option.flags() |
                QTextOption::ShowTabsAndSpaces |
                QTextOption::ShowLineAndParagraphSeparators |
                QTextOption::AddSpaceForLineAndParagraphSeparators);
document()->setDefaultTextOption(option);

// Скрыть символы форматирования
QTextOption option = document()->defaultTextOption();
option.setFlags(option.flags() &
                ~QTextOption::ShowTabsAndSpaces &
                ~QTextOption::ShowLineAndParagraphSeparators &
                ~QTextOption::AddSpaceForLineAndParagraphSeparators);
document()->setDefaultTextOption(option);

 

Я радостно заменил свой код на установку вышеперечисленных флагов, и что же я увидел? Текст и отступы плывут при включении отображения символов форматирования. Картинки съежжают. Символ перевода строки в таблице наежжает на первую букву первой ячейки таблицы. И никакие игры с опциями этого исправить не могут.

 

Вот так это выглядит:

 

Нажмите для просмотра анимации

 

Мне такая реализация символов форматирования даром не нужна.Так что пока в MyTetra останется странный, но работающий код.

 



Поделиться этой страницей


Статистика


RSS подписка

Подпишитесь на новости сайта по RSS


 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик