Qt - 覆盖QGraphicsView over vlc视频

时间:2013-06-27 14:38:50

标签: python qt pyqt pyside vlc

我在为我的项目实施VLC播放器时遇到了一些麻烦。我需要使用QgraphicsView(基本画布)覆盖视频,这样我才能绘制东西。我试过这样做:

  1. 指向QgraphicsView的指向winId的指针。视频呈现得很好,但它呈现在对象之上,因此我的图形项目在视频层下。 =>失败
  2. 创建新的QGraphics对象作为我的主要QGraphics对象的子对象,然后将视频呈现给这个孩子。结果与上述相同。 =>失败
  3. 使用我的QGraphicsView(相同的位置和大小)覆盖带有渲染视频的QWidget。我设置了透明背景,因此我可以看到叠加的小部件,但此层下的视频不会呈现。我保持白色,但我能听到它的演奏。 =>失败
  4. 我在这个论坛上看到,有人提取每一帧,并将其设置为像素映射到一个对象。我看到了这些代码,但是我没有得到它,因为我不是C ++专业人员:(我正在使用Qt(PySide)和VLC的Python绑定。请帮助,它真的困扰我:(

    http://forum.videolan.org/viewtopic.php?f=32&t=68816&p=228645

2 个答案:

答案 0 :(得分:1)

最近,我使用了集成的Phonon播放器。通过QGraphicsProxyWidget将Phonon视频小部件添加为GraphicsItem是可行的。在Windows背景上使用K-Lite编解码器包就像魅力一样。

答案 1 :(得分:0)

我知道这个问题已经有一段时间了,但我今天试图解决这个问题时遇到了这个问题并想出我的解决方案。

几乎你的第三次尝试是正确的,但你必须使QGraphicsView你使用透明,因为那是你看到的白色。你只需要用setGeometry手动确保视图跟踪你的窗口,然后你就可以了。

#assuming you're inside a main window that is self
scene = QGraphicsScene()
scene.setBackgroundBrush(QBrush(QColor(255, 0,0,90))) #creates a semitransparent red over VLC

view = QGraphicsView(self)
view.setScene(self.scene)
view.setGeometry(0,0,self.width(),self.height())

self.view.setStyleSheet("background: transparent");