有没有办法反转 QWidget::setMask() 函数或达到类似的效果?

Dam*_*bic 0 c++ qt mask

我正在尝试在我的小部件背景中“挖一个洞”,以便它位于完全透明的特定位置,并且您可以看到它后面的内容。问题是这个“洞”的大小或位置都不是固定的,所以它基本上可以在小部件上的任何地方,这就是我不能使用蒙版图像的原因。

有函数 setMask(QRegion) 但我需要的效果需要反转,所以基本上不是只绘制遮罩区域,它应该绘制所有未被遮罩覆盖的区域。

有没有办法达到这样的效果?

Dam*_*bic 5

好的,在@ilotXXI 的帮助下,我找到了一种似乎比设置小部件掩码更好的方法:

if(mouseIsDown)                    // Only draw empty rect when mouse down
    painter.setClipRegion(rectRegion.subtracted(emptyRegion));

painter.setBrush(QColor(0, 0, 0, 150));  //color for not-empty area
painter.drawRect(this->geometry());      // draw not-empty area
Run Code Online (Sandbox Code Playgroud)

这似乎比设置蒙版要快得多,我再也没有滞后了。@ilotXXI 感谢您的帮助:)