Qt5将小部件覆盖在本机窗口小部件上

时间:2017-05-11 00:58:21

标签: c++ linux qt qt5 mpv

在我正在为Linux编写的应用程序中,我有一个由本机窗口支持的QWidget(视频,通过libmpv呈现),我想在其上覆盖另一个(透明)QWidget,它将用于绘制视频。

我尝试将它们放入包含QStack并带有QStackedLayout(使用StackAll模式),但这会导致本机窗口内容更新不会反映在应用程序中,即使我在包含的小部件上设置Qt :: WA_NativeWindow也是如此容器及其所有子项(叠加层和视频窗口小部件)都是作为本机窗口创建的。

如果不存在重叠窗口小部件,则本机窗口会正确更新,因此在这方面没有问题。叠加窗口小部件本身也没有问题,因为它只显示部分覆盖视频窗口小部件区域。

在过去,我使用Gtk +写了类似的东西,在那里我通过使用gdk_window_set_composited来解决这个问题,这会导致视频窗口小部件在屏幕外呈现,并且只要子项更新就会通知父窗口小部件,以便它可以处理绘制子项内容本身。但是,我无法在Qt中发现任何等同的内容,所以我对如何实现这一点感到茫然。

使用QOpenGLWidget不是一个选项,因为如果在播放期间切换当前工作区,则libmpv存在视频渲染速度变慢的问题。

0 个答案:

没有答案