Qt - Наложение QGraphicsView поверх видео vlc

У меня возникли проблемы с внедрением проигрывателя VLC в свой проект. Мне нужно наложить видео с помощью QgraphicsView (в основном холст), чтобы я мог рисовать. Я пробовал сделать это так:

  1. Укажите указатель winId на QgraphicsView. Видео отображается просто отлично, но оно отображается поверх объекта, поэтому мои графические элементы находятся под слоем видео. => сбой
  2. Создайте новый объект QGraphics как дочерний для моего основного объекта QGraphics, а затем визуализируйте видео для этого дочернего элемента. Результат такой же, как и выше. => сбой
  3. Наложение QWidget на визуализированное видео с моим QGraphicsView (такой же поз и размер). Я установил прозрачный фон, поэтому я могу видеть наложенные виджеты, но видео под этим слоем просто не будет отображаться. Я остаюсь белым, но слышу его игру. => сбой

Я читал на этом форуме, что кто-то извлекает каждый кадр и устанавливает его как растровое изображение для объекта. Я видел код, но, к счастью, я его не понимаю, потому что я не профессионал в C ++ :( Я использую привязки Python для Qt (PySide) и для VLC. Пожалуйста, помогите, это меня действительно беспокоит :(

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


person m1lhaus    schedule 27.06.2013    source источник


Ответы (2)


Последнее время я использовал встроенный проигрыватель Phonon. Можно добавить виджет видео Phonon как GraphicsItem через QGraphicsProxyWidget. Прекрасно работает с пакетом кодеков K-Lite на фоне Windows.

person m1lhaus    schedule 06.07.2013

Я знаю, что этот вопрос был некоторое время назад, но я просто столкнулся с этим, пытаясь понять это сегодня, и подумал, что предлагаю свое решение.

в значительной степени ваша третья попытка была правильной, но вы также должны сделать 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");
person chocolossus    schedule 31.01.2014
comment
Я не могу заставить его работать правильно. По-прежнему нет рендера. - person m1lhaus; 14.10.2014