在QWidget上使用alpha透明蒙版?

时间:2011-09-29 07:46:50

标签: qt mask qwidget qpainter alpha-transparency

是否可以为QWidget分配alpha透明蒙版?我知道如何使用setMask设置遮罩,但它似乎只支持黑色和白色遮罩。是否有可能使其支持真正的alpha通道?

即。目前我有这样一个PNG:

enter image description here

和这样的小部件:

enter image description here

如果我将我的PNG加载到QPixmap并将其设置为蒙版,我会得到这个(注意边缘):

enter image description here

但是我想得到这个(光滑的边缘):

enter image description here

知道怎么做吗?

注意:我在小部件上做了一些更复杂的绘图,必须将其限制在遮罩区域,所以我不能简单地将PNG设置为小部件的背景图像。

1 个答案:

答案 0 :(得分:2)

我认为您的最佳路线位于QPainter's composition modes

例如:

QPixmap PixmapToBeMasked(Size);
PixmapToBeMasked.fill(QColor(255, 255, 255, 120));

QPixmap Mask = DoSomethingToGetAMask();

QPainter Painter(&PixmapToBeMasked);
Painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
Painter.drawPixmap(0, 0, Mask.width(), Mask.height(), Mask);

这将很好地处理您的小部件。如果你仍然需要屏蔽鼠标事件,你可能需要做一些额外的工作。