2009-07-09 8 views
3

Ich entwickle eine Qt-Anwendung, die die Videos abspielen kann und eine Scroll-Leiste auf dem Weg zeigt. Die Fenstergröße darf die Grenze von 720px Höhe und 1280 Breite nicht überschreiten. Ich benutze MPlayer als Slave-Prozess und gebe ihm die winId() des QWidget und es rendert das Video darin. Jetzt möchte ich ein weiteres Widget oben auf diesem Video-Widget, um die ganze Zeit einige Ergebnisse anzuzeigen, aber das Platzieren eines Label-Widgets über dem Widget, das Video enthält, dient nicht dem Zweck, da es immer wieder vom Video übermalt wird. Irgendeine Problemumgehung? Vorschläge dazu?Malen über Video in einem Qt Widget

Antwort

1

Bei der Verwendung von MPlayer auf diese Weise, glaube ich, Ihre beste Option wäre, ein zweites Fenster zu erstellen.

Es gibt ein paar Wege, die Sie von hier aus gehen könnten, die raffiniertere Methode, die bei einigen Versionen/Konfigurationen von Xorg nicht funktioniert, ist, dass das zweite Fenster dieselbe Größe wie das erste hat und es direkt über dem anderen platziert (mit einem Mechanismus, um das andere Fenster zu verschieben, wenn eines verschoben wird) und das Fenster mit Ausnahme der Steuerelemente transparent zu machen (Transparenz ist das Problem mit einigen X-Versionen, siehe labs.trolltech.com für einige Beispiele). Die alternative Methode, von der ich glaube, dass sie im Vollbildmodus verwendet wird, besteht darin, dass das zweite Fenster nur eine kleine Sache mit den Steuerelementen ist und es über dem ersten Fenster mit einem Offset und Nein positioniert wird border ... Wenn das erste Fenster verschoben wird, wird die Position des zweiten Fensters aktualisiert.

+0

Vielen Dank für Ihre Antwort. Ich habe noch keine Zeit, es auszuprobieren, ich würde meinen Fortschritt und die Lösung veröffentlichen. –

0

Ich schlage vor, Sie schauen in das Phonon-Framework für das Abspielen des Videos. Es sollte mit dem Spielen umgehen, ohne eine separate ausführbare Datei aufzurufen, was wahrscheinlich das Malproblem lösen würde.

+0

Ich habe das versucht, aber es funktioniert überhaupt nicht gut. Ich frage mich, wie VLC Fortschrittsbalken im Vollbildmodus zeigt? –

0

Verkapseln Sie Ihr Video in einem Widget und senden Sie ein QImage in einen Slot, der es in eine QPixmap konvertiert, die Sie während des Überschreibens von paintEvent() auf dem Widget malen.

Ich weiß nicht, welche Art von Interaktion Sie mit Ihren Videos als "eine Nachricht" bieten müssen, aber wenn Sie etwas ausgefallenes wollen, kann QGraphicsView viele dieser Effekte für Sie bereitstellen.

Hoffe, das hilft.