在QT应用程序中制作一个透明孔

Make a transparent hole in a QT application

我有两个 Qt 应用程序重叠在一起的问题。最上面的 Qt 应用程序需要一个透明的孔来显示它后面的 Qt 应用程序。有什么办法吗?或者 Qt 库中的某处是否有可以帮助我的示例?

澄清一下, 如果我在 Windows 机器上 运行 Qt 应用程序,我想通过透明孔看到我的桌面背景.

我确实找到了 windowOpacity 属性。不幸的是,这 属性 改变了整个应用程序的不透明度,而不仅仅是应用程序的一部分。

为什么你需要 2 个 Qt 应用程序?在同一个应用程序中绘制它们? 由于安全原因,应用程序 需要 是独立的,因此对于这个项目来说这是不可能的。要将两个应用程序分开,两者之间的通信有限,不能使用相同的 QT 应用程序。

编辑:由于我的问题不够清楚而被删除,这里有 3 个我正在努力实现的例子。

示例 1:在这里您可以看到我希望如何显示应用程序 1。 2个正方形,1个不透明的大正方形(蓝色)和第一个透明正方形内的第二个正方形(白色)(很难在图片中显示透明度)。

示例 2:在这里您可以看到我希望如何显示这两个应用程序。在透明方块的后面显示了第二个应用程序。当它们完美对齐时,就没什么可看的了,看起来就像是 2 个应用程序相互重叠。

示例 3:在这里您可以看到当第二个应用程序没有以正确的方式对齐时应用程序应该如何交互。只能通过第一个应用程序的透明部分看到第二个应用程序。

再次重复我原来的问题: 是否可以创建带有透视孔的 Qt 应用程序?

我的跟进: Qt 库或任何其他实现此功能的地方是否有任何示例?

最终在大量使用 Qt 之后,我已经能够做我想做的事情了。

我的解决方案基于 Qt 中的 clock 示例。我已将 resizeEvent 更改为以下内容:

void Widget::resizeEvent(QResizeEvent * /* event */)
{
    QRegion outsideMask(QRect(0, 0, 200, 200));
    QRegion insideMask(QRect(50, 50, 100, 100));
    QRegion mask = outsideMask.subtracted(insideMask);

    setMask(mask);
}

如果您不使用时钟示例,请务必不要忘记将背景设置为半透明: setAttribute(Qt::WA_TranslucentBackground);

之后我改变了时钟,因为我只需要一个有洞的正方形。

最终解决方案如下(在 google 页面顶部以显示透明度):

此解决方案的好处在于它适用于 Linux 和 Windows。因为我尝试过的大多数事情都适用于 Windows 但不适用于 Linux.

感谢@ymoreau 指引我正确的方向!