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


Новости

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

 



Интересное на сайте


Qt » Как в MyTetra настроить синхронизацию через интернет

Начиная с версии 1.30, в менеджере накопления информации MyTetra появилась возможность синхронизации данных через интернет. О том, как настроить синхр...


Перевод документации Ext JS 4.2 » Ext JS 4.2. Часть 3.8: Запись данных на сервер

  Запись данных на сервер   Все достаточно просто. Нам нужно сохранять на сервер изменения, сделанные в интерактивном режиме на стороне брау...


Демо, сделанное в генераторе » Xintrea Home Page Demo

Размер: 250 Кбайт Требования: Windows 95/98/XP Год: 2005   Демка для моего старого сайта xi.net.ru. Демка сделана просто щелчками мышки, с ...

RSS подписка

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

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


Статистика


Аппаратные колеса и ролики. Компания Олстронг.
Колесные опоры колеса для тележек колесные.
Колесики для мебели колесные опоры.

Внимание!


На этом сайте разрабатывается программа MyTetra и её родственные проекты. Доступны к просмотру следующие базы знаний:

 

База Xintrea (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean

База Аrmagedec

База SorokinRed

База Deadelf79

База Fadk

 

Требуют доработки:

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База Duwaz

 

Подробности на странице MyTetra Share.

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