【问题标题】:Drawing text with shadow on pixmap with QPainter使用 QPainter 在像素图上绘制带阴影的文本
【发布时间】:2016-10-12 19:55:04
【问题描述】:
我正在使用 Qt 在 C++ 中开发一个项目,并且我正在尝试找到一种在使用 QPainter 在 QPixmap 上绘制文本时应用文本阴影的方法。
我知道QGraphicsDropShadowEffect 是一个东西,我正在我项目的其他部分使用,但我终其一生都找不到在使用 QPainter 在像素图上绘图时应用 QGraphicsEffect 的方法。用不同的偏移量和不透明度多次绘制相同的文本并不能完全消除它。
有没有办法做到这一点?
如果没有,我怎么能去制作一个函数呢,给定一个 QGraphicsEffect 来获取半径和颜色?
提前致谢!
【问题讨论】:
标签:
c++
qt
shadow
qpainter
【解决方案1】:
我不认为直接可以“绘制带有阴影的文本”,只能将阴影应用到已经绘制的元素上,并使用它的 alpha 通道来计算阴影。
您应该在最终产品或绘图期间使用合成。如果您在文本元素上使用它,它应该可以工作。另一种选择是将您的文本绘制为黑色,应用高斯模糊,然后再次在其上以所需的偏移量绘制文本。
【解决方案2】:
感谢您的回答 ddriver,它让我搜索了一些新的关键字,这使我找到了适合我的项目的解决方案。
我发现你可以简单地创建一个带有你想要的文本和效果的 QLabel(在我的例子中是 QGraphicsDropShadowEffect),然后使用 QWidget::grab() 将它渲染成一个 QPixmap。然后,您可以像绘制任何其他图像一样使用 QPainter 绘制这个新的像素图,方法是将您的像素图转换为 QImage 并使用 QPainter 的 drawImage()。