【问题标题】:Using an alpha transparent mask on a QWidget?在 QWidget 上使用 alpha 透明蒙版?
【发布时间】:2011-11-27 11:42:24
【问题描述】:

是否可以为 QWidget 分配 alpha 透明掩码?我知道如何使用setMask 设置蒙版,但它似乎只支持黑白蒙版。是否可以让它支持真正的 alpha 通道?

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

还有一个像这样的小部件:

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

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

知道怎么做吗?

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

【问题讨论】:

    标签: qt mask qwidget qpainter alpha-transparency


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2018-11-26
      相关资源
      最近更新 更多