在QWidget上使用alpha透明遮罩?

问题描述:

是否可以为QWidget分配一个alpha透明掩码?我知道如何设置使用setMask的面具,但它似乎只支持黑色&白色面具。是否有可能使其支持真正的Alpha通道?在QWidget上使用alpha透明遮罩?

即目前我有这样一个PNG:

enter image description here

和小窗口是这样的:

enter image description here

如果我打开我的PNG在的QPixmap,并将其设置为面具,我得到这个(注意边缘):

enter image description here

不过,我想获得这个(平滑的边缘):

enter image description here

任何想法如何做到这一点?

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

我认为你最好的路线是在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); 

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