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

标签 c++ qt mask

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

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

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

最佳答案

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

这似乎比设置 mask 工作得更快,而且我不再有延迟。 @ilotXXI 感谢您的帮助:)

关于c++ - 有没有办法反转 QWidget::setMask() 函数或达到类似的效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682487/

相关文章:

QT 布局 - 初始方向

svg - 是否可以使用路径绘制的内联 svg 来掩盖图像?

c++ - 未定义对 Gtest 的 pthread 的引用

c++ - Enable_if 作为模板参数

python - 如何使用 Boost.Python 将 NumPy ndarray 转换为 C++ vector 并返回?

c++ - 如何正确清理 QWidget/管理一组窗口?

c++ - 如何从非 Qt 函数访问 Qt 资源数据

ios - 如何用另一个透明的 CALayer 遮盖 CALayer?

android - 带有蒙版的意外纹理混合结果

c++ - 如何确定阻塞的 SSL BIO 连接是否已关闭?