我不知道我是否在这里使用了正确的术语。然而,这是我想要实现的目标,我想就如何实现这一目标提出一些建议。我想要一个带有可见边框的圆圈。现在这是困难的部分,我什至不知道如何开始。我想以这样的方式操纵圆圈,使圆圈的边界可见,而它的中心不可见(即它几乎有一个洞,并且会显示它下面的东西)然后我想要将另一个图像放置在圆圈下方,以便仅显示圆圈透明部分下方的图像部分,圆圈透明边界之外的部分变得不可见。关于如何实现这一目标的任何建议。谷歌搜索似乎对我没有帮助。
2 回答
我会建议用另一种方法来揭开图像的圆形区域。您可以指定剪辑区域 - 您需要执行绘画的区域。例如:
[..]
QPainter painter(this);
// Sample circular area.
QRegion r(QRect(100, 100, 200, 200), QRegion::Ellipse);
painter.setClipRegion(r);
[..]
painter.drawImage(0, 0, image);
[..]
这将仅绘制半径为 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();
You might want to have a look at the Composition Example.
In short you could draw the first image and then use one of the Composition Modes to draw the second image on top (or the other way around). Make sure to convert the images to ARGB32 before using them. To make the inner Part of the Circle transparent you can adjust the Alpha Channel accordingly.
Here is a small Example using Composition mode:
QPainter p(&imageCircle);
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
p.drawImage(image);
p.end()
Here you can find the Qt Documentation of QPainter.