2016-10-12 5 views
1

Я работаю над проектом в C++ с Qt, и я пытаюсь найти способ применить текстовую тень при рисовании текста на QPixmap с помощью QPainter.Рисование текста с тенью на pixmap с QPainter

Я понимаю, что QGraphicsDropShadowEffect это вещь, и я использую ее в других частях моего проекта, но я не могу на всю жизнь найти способ применить QGraphicsEffect при рисовании с QPainter на pixmap. Однократное повторение одного и того же текста с различными смещениями и непрозрачностью не совсем сокращает его.

Есть ли способы сделать это? Если нет, как я могу сделать функцию, которая делает это, учитывая QGraphicsEffect, чтобы получить радиус и цвет?

Заранее благодарен!

ответ

1

Я не думаю, что прямо «рисовать текст с тенью» можно только применить тень к чему-то уже нарисованному, которое займет элемент, и использовать его альфа-канал для вычисления тени.

Вы должны использовать композицию либо из конечных продуктов, либо во время рисования. Он должен работать, если вы используете его в текстовом элементе. Другой вариант заключается в том, чтобы нарисовать текст в черном, применить размытие по Гауссу, а затем снова нарисовать текст поверх него с нужным смещением.

0

Спасибо за ваш ответ ddriver, он заставил меня искать новые ключевые слова, которые заставляют меня найти подходящее решение для моего проекта.

Что я понял, так это то, что вы можете просто создать QLabel с текстом и эффектами, которые вы хотите (QGraphicsDropShadowEffect, в моем случае), и визуализировать его в QPixmap, используя QWidget::grab(). Затем вы можете рисовать эту новую pixmap с QPainter, как и любое другое изображение, путем преобразования вашей pixmap в QImage и использования drawImage() QPainter.