QT:屏蔽图像 - 建议?

Mis*_*tyD 3 qt image-masking

我不知道我在这里使用的术语是否正确。然而,这就是我想要实现的目标,我想就如何实现这一目标提出一些建议。我想要一个边框可见的圆圈。现在这是困难的部分,我什至不知道如何开始。我想以这样的方式操纵圆圈,即圆圈的边界可见而其中心不可见(即它几乎有一个洞并会显示它下面放置的内容)然后我想要另一个图像放置在圆圈下方,以便仅显示圆圈透明部分下方的图像部分,圆圈透明边界外的部分变得不可见。关于我如何实现这一目标的任何建议。似乎谷歌搜索对我没有帮助。

vah*_*cho 5

我建议使用另一种方法来揭开图像的圆形区域。您可以指定剪辑区域 - 您需要执行绘画的区域。例如:

[..]
QPainter painter(this);
// Sample circular area.
QRegion r(QRect(100, 100, 200, 200), QRegion::Ellipse);
painter.setClipRegion(r);
[..]
painter.drawImage(0, 0, image);
[..]
Run Code Online (Sandbox Code Playgroud)

这将只绘制半径为 200 的圆内的图像部分。所有其余像素将被隐藏。您可以处理鼠标移动事件以像放大镜一样在图像上移动这个“圆圈”。

更新

下面是生成带有圆形蒙版的图像并将其插入标签的示例代码:

QPixmap target(500, 500); // the size may vary
QPixmap source("image.png");

QPainter painter(&target);
QRegion r(QRect(100, 100, 200, 200), QRegion::Ellipse);
painter.setClipRegion(r);
painter.drawPixmap(0, 0, source);

QLabel l;
l.setPixmap(target);
l.show();
Run Code Online (Sandbox Code Playgroud)