【发布时间】:2020-11-11 16:09:47
【问题描述】:
我遇到了一个问题,我有 2 个 Qt 应用程序在彼此之上。顶部的 Qt 应用程序需要一个透明的洞来显示它背后的 Qt 应用程序。有没有办法做到这一点?或者 Qt 库中是否有可以帮助我的示例?
澄清一下,如果我要在 Windows 机器上运行 Qt 应用程序,我希望通过透明孔看到我的桌面背景。
我确实找到了 windowOpacity 属性。不幸的是,这个属性会改变整个应用程序的不透明度,而不仅仅是应用程序的一部分。
您为什么需要 2 个 Qt 应用程序?只需在同一个应用程序中绘制它们? 由于安全原因,应用程序需要分开,这对这个项目来说是不可能的。将两个应用程序分开,两者之间只能进行有限的通信,不能使用同一个 QT 应用程序。
编辑:由于我的问题不够清楚而被删除,这里有 3 个示例来说明我想要实现的目标。
示例 1:在这里您可以看到我希望如何显示应用程序 1。 2个正方形,1个不透明的大正方形(蓝色的)和第一个透明的正方形内的第二个正方形(白色的)(很难在图片中显示透明度)。
示例 2:在这里您可以看到我希望如何显示这两个应用程序。在透明方块后面显示了第二个应用程序。当它们完美对齐时,没什么可看的,它看起来就像两个应用程序相互绘制。
示例 3:您可以在此处看到当第二个应用程序未以正确方式对齐时应用程序应如何交互。第二个应用程序只能通过第一个应用程序的透明部分看到。
再次重复我最初的问题: 是否可以创建带有透视孔的 Qt 应用程序?
我的后续行动: Qt 库中是否有任何示例或任何其他实现此功能的地方?
【问题讨论】:
-
你见过QWidget::setMask吗?它旨在与图像一起使用,但也许您可以解决它以在图像中“绘制”您的洞。不过,我不知道它在带有其他小部件的窗口内的行为方式。
-
谢谢你的提示,我去看看!
-
如果要在 linux 上运行,我建议使用 Wayland 并将您的顶级应用程序设为 Wayland 合成器,然后在其中运行您的第二个应用程序。但是,也许您可以在这个较旧的主题中找到一些提示:stackoverflow.com/questions/33699258/…
-
另外,如果您可以获取应用程序 2 的顶级窗口的 id,那么什么不使用
QWidget::createWindowContainer将其嵌入应用程序 1 中?
标签: c++ qt qt5 x11 qapplication