1

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

  1. 将 winId 指针指向 QgraphicsView。视频渲染得很好,但它渲染在对象的顶部,所以我的图形项目在视频层下。=> 失败
  2. 创建新的 QGraphics 对象作为我的主要 QGraphics 对象的子对象,然后将视频呈现给该子对象。结果与上述相同。=> 失败
  3. 使用我的 QGraphicsView(相同的位置和大小)覆盖 QWidget 与渲染的视频。我已经设置了透明背景,所以我可以看到覆盖的小部件,但该层下的视频不会呈现。我保持白色,但我能听到它在播放。=> 失败

我在这个论坛上读到,有人提取每一帧,并将其设置为对象的像素图。我看到了代码,但很遗憾,我不明白,因为我不是 C++ 专业人士 :( 我正在为 Qt (PySide) 和 VLC 使用 Python 绑定。请帮忙,这真的让我很困扰 :(

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

4

2 回答 2

1

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

于 2013-07-06T10:35:45.807 回答
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");
于 2014-01-31T09:57:38.997 回答