2016-10-12 1 views
1

Je travaille sur un projet en C++ avec Qt, et j'essaie de trouver un moyen d'appliquer une ombre de texte lors du dessin de texte sur un QPixmap en utilisant QPainter. Je comprends que QGraphicsDropShadowEffect est une chose, et j'utilise dans d'autres parties de mon projet, mais je ne peux pas pour la vie de moi trouver un moyen d'appliquer un QGraphicsEffect lorsque vous dessinez avec QPainter sur un pixmap. Dessiner le même texte plusieurs fois avec différents décalages et opacités ne le coupe pas tout à fait.Dessin de texte avec ombre sur pixmap avec QPainter

Y a-t-il des moyens de le faire? Si non, comment pourrais-je faire une fonction qui le fait, étant donné un QGraphicsEffect pour obtenir le rayon et la couleur?

Merci d'avance!

Répondre

1

Je ne pense pas qu'il soit directement possible de "dessiner du texte avec ombre", il est seulement possible d'appliquer une ombre à quelque chose déjà dessiné qui prendrait un élément et utiliserait son canal alpha pour calculer l'ombre.

Vous devez utiliser la composition, soit des produits finis ou pendant l'étirage. Cela devrait fonctionner si vous l'utilisez sur un élément de texte. L'autre option consisterait à dessiner votre texte en noir, à appliquer un flou gaussien puis à dessiner à nouveau le texte avec le décalage souhaité.

0

Merci pour votre réponse ddriver, il m'a fait chercher avec de nouveaux mots clés, ce qui m'a conduit à trouver une solution adaptée à mon projet. Ce que j'ai compris est que vous pouvez simplement créer un QLabel avec le texte et les effets que vous voulez (QGraphicsDropShadowEffect, dans mon cas), et le rendre dans un QPixmap en utilisant QWidget::grab(). Vous pouvez ensuite dessiner ce nouveau pixmap avec QPainter comme vous le feriez pour n'importe quelle autre image, en convertissant votre pixmap en QImage et en utilisant drawImage() de QPainter.