Программа 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 останется странный, но работающий код.