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

时间:2016-07-31 09:15:09

标签: c++ qt mask

我正试图在我的小部件背景中“切出一个洞”,以便它在一个特定的位置完全透明,你可以看到它背后的东西。问题是这个“洞”的大小或位置都没有固定,所以它基本上可以放在小部件的任何地方,这就是为什么我不能使用蒙版图像。

有函数setMask(QRegion),但我需要的效果需要反转,所以基本上不是仅绘制蒙版区域,而是应该绘制掩模未覆盖的所有内容。

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

2 个答案:

答案 0 :(得分:2)

好的,在@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

这似乎比设置掩码要快得多,我不再有任何滞后。 @ilotXXI感谢您的帮助:)

答案 1 :(得分:1)

试试这个:

const QRegion emptyRegion = <create your region>;
const QRegion rectRegion(QRect(QPoint(), widget->size()));
widget->setMask(rectRegion.subtracted(emptyRegion));