Russian Qt Forum
Март 29, 2024, 02:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] QPainter: обводка текста с выравниванием  (Прочитано 4581 раз)
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« : Сентябрь 24, 2017, 06:56 »

Вопрос: как на QImage нарисовать текст с окантовкой (outline) и при этом чтобы работало выравнивание (по левому/правому краю) нескольких строк?
Пробую через QPainterPath но там только метод addText, который не учитывает ни направление письма ни мультистроку ни межстрочный интервал и тд.

Текст рисую так:
p.drawText(rect, flag, currPreset.text);
где p - QPainter
rect - в этот рект вписывается текст
flag - флаги текста (Qt::AlignRight, Qt::TextWordWrap)
« Последнее редактирование: Сентябрь 26, 2017, 00:04 от Torvald » Записан
Apktyc
Самовар
**
Offline Offline

Сообщений: 129


Просмотр профиля
« Ответ #1 : Сентябрь 25, 2017, 10:42 »

Если костыль@велосипедь допустимо, то через QTextDocument однопиксельную обводку можно сделать так.

Код
C++ (Qt)
 QPainter* Painter = new QPainter;
 TextImage.fill(BackgroundColor);
 Painter->begin(&TextImage);
 // Outline text
 if (OutlineColor != Qt::transparent)
 {
   Painter->translate(-1, 0);
   TextDocument->drawContents(Painter);
   Painter->translate(2, 0);
   TextDocument->drawContents(Painter);
   Painter->translate(-1, 1);
   TextDocument->drawContents(Painter);
   Painter->translate(0, -2);
   TextDocument->drawContents(Painter);
   Painter->translate(0, 1);
   Painter->setCompositionMode(QPainter::CompositionMode_SourceIn);
   Painter->fillRect(TextImage.rect(), OutlineColor);
   Painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
 }
 TextDocument->drawContents(Painter);
 Painter->end();
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #2 : Сентябрь 26, 2017, 00:04 »

Уже сделал. Немного хардкорным методом правда. Рендерю текст в отдельный буфер, строю SDF, делаю обводку, вывожу.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 22.