Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
QT - QMovie Flacker Effekt

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jens
Gast





BeitragVerfasst am: 15. Mai 2003 13:07   Titel: QT - QMovie Flacker Effekt

Hallo,

ich habe ein klaines QT Programm geschrieben, dass mir im Vollbildmodus ein Jpeg als Hintergrund und davor eine Gif Animation zeigt.
Wenn man die Gif Animation nun allerdings ausblendet oder einfach nur auswechselt, gibt es immer unschöne Flackereffekte oder an der Stelle des Bildschirms wo zuvor die Animation war leuchtet nochmal kurz ein graues Kästchen in der Größe des Bildes auf.
Die Anzeige habe ich mittels zweier QLabel Fenster realisiert. Im Hintergrund liegt ein QWidget im Vollbild. Das erste QLabel (Hintergrund) ist child des QWidgets und das zweite QLabel (Animation) wiederum child des ersten QLabels.

BFenster=new QLabel(this);
AFenster=new QLabel(BFenster);

this ist die von QWidget abgeleitete Fensterklasse.

So lade ich den Hintergrund, wobei Background vom Typ QPixmap ist.

Background->load(AKlasse->GetBackground()); // Neuen Background laden,
BFenster->setPixmap(*Background); // ans Fenster binden,
BFenster->resize(Background->width(),Background->height()); // Größe einstellen,
BFenster->move((this->width()-Background->width())/2,(this->height()-Background->height())/2); // und zentrieren.

Und so lade ich die Animation. Da die Klasse QMovie keine load() Funktion besitzt, erzeuge ich das Objekt Animation jedes Mal neu.

delete Animation; // Aktuelle Animation wird gelöscht,
Animation=new QMovie(AKlasse->GetAnimation()); // eine Neue erstellt, über den Konstruktor geladen
Animation->setBackgroundColor(QColor(0,0,0)); // der Hintergrund gesetzt (verhindert flackern),
AFenster->move(AKlasse->GetX(),AKlasse->GetY()); // die Position eingestellt
AFenster->resize(AKlasse->GetWidth(),AKlasse->GetHeight()); // die Größe eingestellt,
AFenster->setMovie(*Animation); // und ans Fenster gebunden.


Um es nochmal auf den Punkt zu bringen. AFenster liegt vor BFenster. Wenn ich AFenster ausblende AFenster->hide() kommt der Effekt, dass kurz ein graues Kästchen zu sehen ist.
Genau diesen Effekt würde ich gerne beseitigen.

Kann mir jemand weiterhelfen?

Vielen Dank im Voraus,

Jens
 

Dominik Seichter
Gast





BeitragVerfasst am: 15. Mai 2003 13:37   Titel: Re: QT - QMovie Flacker Effekt

Mir fallen da spontan zwei Möglichkeiten ein:
1. Schau Dir mal die Doku zu QWidget::setUpdatesEnabled( bool ) an. Schalte die updates aus befor Du die alte Animation löschst und wieder an wenn die neue geladen ist. Das sollte das flacken beheben.

2. Die andere Möglichkeit wäre, die neue Animation zu laden bevor, Du die alte löschst. Zum Beispiel so:

Animation2 = new QMovie( gifbild );
delete Animation;
Animation = Animation2;

So in der Art sollte es auch klappen.

CU Dom
 

Jens
Gast





BeitragVerfasst am: 19. Mai 2003 9:38   Titel: Re: QT - QMovie Flacker Effekt

Danke für deine Antwort, aber daran liegt es leider nicht.

Selbst wenn ich nur einmal eine Animation anzeige und diese dann später wieder verstecke habe ich sowohl beim Laden als auch beim Verstecken unschöne Effekte. Wahrscheinlich wird der alte Hintergrund zu langsam wieder hergestellt und die Animation zu langsam aufgebaut oder sowas ähnliches.
Kann man da irgendwie Abhilfe schaffen?

Jens
 

Udo Kanter
Gast





BeitragVerfasst am: 19. Mai 2003 21:46   Titel: Re: QT - QMovie Flacker Effekt

Vielleicht hilft Dir folgender Hinweis:

One common use of the QPixmap class is to enable smooth updating of widgets. Whenever something complex needs to be drawn, you can use a pixmap to obtain flicker-free drawing, like this:


Create a pixmap with the same size as the widget.
Fill the pixmap with the widget background color.
Paint the pixmap.
bitBlt() the pixmap contents onto the widget.

Pixel data in a pixmap is internal and is managed by the underlying window system. Pixels can be accessed only through QPainter functions, through bitBlt(), and by converting the QPixmap to a QImage.
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy