在 Qt 小部件中的视频顶部绘画

Posted

技术标签:

【中文标题】在 Qt 小部件中的视频顶部绘画【英文标题】:Painting on top of video in a Qt Widget 【发布时间】:2009-07-09 13:20:53 【问题描述】:

我正在开发一个 Qt 应用程序,它可以播放视频并显示一些滚动条。窗口大小不得超过高度 720 像素和宽度 1280 像素的限制。我使用 MPlayer 作为从属进程并将 QWidget 的 winId() 传递给它,然后它会在其中渲染视频。现在我希望在这个视频小部件顶部的另一个小部件一直显示一些结果,但是在包含视频的小部件顶部放置一个标签小部件并不能达到目的,因为它被视频一遍又一遍地绘制。任何解决方法?有什么建议吗?

【问题讨论】:

【参考方案1】:

以这种方式使用 MPlayer 时,我相信您最好的选择是创建一个第二个窗口

您可以从这里开始使用几种方法,可能不适用于 Xorg 的某些版本/配置的更奇特的方法是让第二个窗口与第一个窗口大小相同,并将其直接放在另一个窗口的顶部(具有在移动任何一个窗口时移动另一个窗口的机制),并使窗口透明,除了您的控件(透明度是某些版本的 X 的问题,请查看 labs.trolltech.com 以获取一些示例)。

我相信 VLC 在全屏模式下使用的另一种方法是让第二个窗口只是一个带有控件的小东西,并将其放置在第一个窗口的顶部,有偏移且没有边框...这样当第一个窗口移动时,第二个窗口的位置就会更新。

【讨论】:

非常感谢您的回复。我还没有时间尝试,我会发布我的进度和解决方案。【参考方案2】:

我建议您查看用于播放视频的 Phonon 框架。它应该在不调用单独的可执行文件的情况下处理播放,这可能会解决绘画问题。

【讨论】:

我已经尝试过了,但它根本无法正常工作。我想知道VLC如何在全屏模式下显示进度条?【参考方案3】:

将您的视频封装在一个小部件中,将一个 QImage 发射到一个插槽中,该插槽将其转换为一个 QPixmap,您可以在覆盖的 paintEvent() 期间在小部件上绘制该 QPixmap。

我不知道除了“一条消息”之外你还需要为你的视频提供什么样的互动,但如果你想要一些花哨的东西,QGraphicsView 可以为你提供很多这样的效果。

希望这会有所帮助。

【讨论】:

以上是关于在 Qt 小部件中的视频顶部绘画的主要内容,如果未能解决你的问题,请参考以下文章

QT 绘画到小部件

其他非 qt 窗口顶部的 Qt 小部件

Qt 中聊天会话的最佳小部件

Qt 加载消息应保持在父小部件的顶部并居中

QT 小部件指针

为啥我想在 Qt 小部件上绘制的“矩形”没有出现?