Рисование поверх видео в виджете Qt

Я разрабатываю приложение Qt, которое может воспроизводить видео и показывать полосу прокрутки по пути. Размер окна НЕ ДОЛЖЕН превышать лимит в 720 пикселей по высоте и 1280 пикселей по ширине. Я использую MPlayer как подчиненный процесс и передаю ему winId() QWidget, и он отображает в нем видео. Теперь я хочу, чтобы другой виджет поверх этого виджета видео постоянно показывал какие-то результаты, но размещение виджета метки поверх виджета, содержащего видео, не служит цели, поскольку он снова и снова закрашивается видео. Любое обходное решение? Предложения по этому поводу?


person Mohsin Shafique    schedule 09.07.2009    source источник


Ответы (3)


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

Есть несколько способов, которыми вы можете пойти отсюда, более причудливый способ, который может не работать в некоторых версиях/конфигурациях Xorg, состоит в том, чтобы иметь второе окно того же размера, что и первое, и поместить его непосредственно поверх другого (с механизмом , чтобы переместить другое окно, когда одно из них перемещается), и сделать окно прозрачным, за исключением ваших элементов управления (прозрачность является проблемой для некоторых версий X, проверьте labs.trolltech.com для некоторых примеров этого).

Альтернативный метод, который, как мне кажется, использует VLC в полноэкранном режиме, состоит в том, чтобы второе окно было просто маленькой вещью с элементами управления и располагалось поверх первого окна со смещением и без рамки... таким образом, когда первое окно перемещается, положение второго окна обновляется.

person Kitsune    schedule 20.07.2009
comment
Большое спасибо за Ваш ответ. У меня пока нет времени попробовать, я бы опубликовал свой прогресс и решение. - person Mohsin Shafique; 07.08.2009

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

person Caleb Huitt - cjhuitt    schedule 09.07.2009
comment
Я пробовал это, но это вообще не работает. Интересно, как VLC показывает индикатор выполнения в полноэкранном режиме? - person Mohsin Shafique; 09.07.2009

Инкапсулируйте свое видео в виджет, испуская QImage в слот, который преобразует его в QPixmap, который вы рисуете на виджете во время переопределенного paintEvent().

Я не знаю, какое взаимодействие вы должны обеспечить с вашими видео, кроме «сообщения», но если вы хотите что-то необычное, QGraphicsView может предоставить вам множество таких эффектов.

Надеюсь это поможет.

person bgs    schedule 24.08.2009