Название: Шрифт с окантовкой Отправлено: bigirbis от Июль 19, 2007, 11:12 Есть такая задача: в paintEvent() нарисовать строку, каждая буква, которой будет иметь окантовку. Т.е. сама буква красная, а края линий у нее черные. Не могу осилить, с какой стороны подойти.
Кто-нибудь решал подобную задачу? Qt 4.2.2 Название: Шрифт с окантовкой Отправлено: Gryz от Июль 19, 2007, 11:21 что если рисовать текст в два слоя - первый красный черный текст, второй - обычный красный.
Только придется повозиться с правильным расположение букв второго слоя. Название: Шрифт с окантовкой Отправлено: bigirbis от Июль 19, 2007, 11:30 Вся проблема в том, как сделать этот нижний слой толще, чем верхний. Bold не подходит, т.к. пространство, занимаемое строкой, меняется не так, как этого бы хотелось.
Название: Шрифт с окантовкой Отправлено: Gryz от Июль 19, 2007, 12:08 а как хотелось ?
Название: Шрифт с окантовкой Отправлено: bigirbis от Июль 19, 2007, 12:14 Если на примере обычных линий, то так:
- рисуется линия черного цвета толщиной 8 пикселов - рисуется красная линия толщиной в 4 пиксела. Но, к сожалению, мне такую штуку не удалось применить для шрифта. Название: Шрифт с окантовкой Отправлено: Tonal от Июль 19, 2007, 12:40 В WinAPI эта проблема решается с помощью path-ей.
path - это векторный объект графики. Из строки создают объект path-а, а потом его обводят и заливают. Думаю, что какая-то подобная техника должна быть доступна и в Qt. Название: Шрифт с окантовкой Отправлено: bigirbis от Июль 19, 2007, 12:48 Это я уже пробовал. Вопрос в том, каким образом "расширить" QPainterPath, полученный из строки.
Название: Шрифт с окантовкой Отправлено: -=s0L=- от Июль 19, 2007, 13:33 Цитата: "bigirbis" Это я уже пробовал. Вопрос в том, каким образом "расширить" QPainterPath, полученный из строки. ну это же векторная графика, юзай QMatrix для преобразования, в данном случае надо сделать scale, создать QMatrix и умножить его на QPainterPath, получишь новый Path в соответствии с преобразованием в QMatrix. Название: Шрифт с окантовкой Отправлено: Tonal от Июль 19, 2007, 14:11 Цитата: "bigirbis" Это я уже пробовал. Вопрос в том, каким образом "расширить" QPainterPath, полученный из строки. Не надо "расширять". Надо залить, а потом обвести. Название: Шрифт с окантовкой Отправлено: bigirbis от Июль 19, 2007, 14:32 Короче так:
Код: QPainter p( this ); Жаль, что сразу не догадался. :oops: Всем спасибо за беспокойство. Тема закрыта Название: Шрифт с окантовкой Отправлено: Anchorite от Июль 19, 2007, 14:44 Такой эффект с текстом можно сделать довольно просто. Пример кода правда на Яве, но думаю разобраться можно ;)
Код:
|