gpt4 book ai didi

qt5 - 如何在 QWidget 上使用具有透明度的蒙版?

转载 作者:行者123 更新时间:2023-12-04 02:01:03 24 4
gpt4 key购买 nike

我正在尝试在我的 QWidget 上使用掩码。我想用一行按钮覆盖现有的小部件 - 类似于 Skype

请注意,这些按钮没有锯齿状边缘 - 它们很好地抗锯齿,并且它们下方的小部件仍然可见。
我试图使用 Qt 样式表来实现这一点,但是在应该“屏蔽”的像素上,它只是黑色——它是黑色矩形背景上的圆形按钮。
然后我尝试使用 QWidget::mask() 来做到这一点。我使用了以下代码

QImage alpha_mask(QSize(50, 50), QImage::Format_ARGB32);
alpha_mask.fill(Qt::transparent);

QPainter painter(&alpha_mask);
painter.setBrush(Qt::black);
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(25,25), 24, 24);

QPixmap mask = QPixmap::fromImage(alpha_mask);
widget.setMask(mask.mask());

可悲的是,它导致以下效果

“边缘”是锯齿状的,它们应该是平滑的。我保存了生成的掩码,以便我可以调查是否是问题所在

不是。

我知道 Skype 的 Linux 版本确实使用 Qt,因此应该可以重现。但是如何?

最佳答案

我看到的一种可能的方法如下。

  • 准备一个漂亮的高分辨率像素图,在透明背景上带有圆形按钮图标。
  • 在方形小部件上绘制像素图。
  • 然后 mask 小部件,只在圆形图标的边界外留下一点边距,这样小部件 mask 的锯齿就不会触及图标的平滑边框。
  • 关于qt5 - 如何在 QWidget 上使用具有透明度的蒙版?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31144234/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com