Anzeige:
Ergebnis 1 bis 5 von 5

Thema: QT Flackereffekt

  1. #1
    jenshe
    Gast

    QT Flackereffekt

    Hallo,

    ich habe ein kleines Programm geschrieben, dass mir ein QWidget im Vollbild anzeigt, davor ein QLabel mit einem QPixmap (Hintergrund) und davor wiederum ein QLabel mit einem QMovie.
    Wenn ich das QLabel mit der Animation lade oder später wieder verstecke, entstehen immer unschöne Effekte.
    Zum Beispiel erscheint kurz in der Größe des QLabels ein kleines graues Kästchen oder es flackert kurz o. ä. Lade ich eine Animation die genauso groß ist wie der Hintergrund, ist dieser kurzzeitig sogar garnicht zu sehen.
    Anscheinend wird die Animation, bzw. der Hintergrund, beim Verstecken der Animation, zu langsam wieder hergestellt.
    Kann man da irgendwie Abhilfe schaffen. Nach Möglichkeit soll man nämlich überhaupt nicht sehen, dass vor bestimmten Stellen des Hintergrundes eine Animation eingeblendet wird.

    Vielen Dank schonmal,

    Jens

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Da kann man eventuell etwas mit Widget Flags machen, um das repaint Verhalten des Hauptwidgets zu beeinflussen.

    Ist das Hintergrund Label so groß wie das Hauptwidget, oder ist das nur über einem gewissen Bereich?

    Ist das Movie Label ein Kind des Background Labels?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    jenshe
    Gast
    Das Hauptwidget habe ich mit "showFullScreen" auf Vollbild gesetzt.
    Das Hintergrundlabel ist kleiner als das Hauptwidget.
    Seine Größe stelle ich je nach Größe des QPixmap ein. Im Augenblick ist es immer 640*480 Pixel groß.
    Ja, das Movie Label ist ein Kind des Hintergrund Labels.
    Das Hintergrund Label ist wiederum Kind des Hauptwidgets.
    In der Implementation meiner Fensterklasse (Hauptwidget) steht also:

    HintergrundLabel = new QLabel(this);
    AnimationsLabel = new QLabel(HintergrundLabel);

    Ich möchte nun also wechselnde Animationen im Movie Label vor dem Hintergrund Label darstellen.
    Größe und Position des Movie Labels sind variabel.
    Das Einblenden der Animation sollte möglichst nicht zu sehen sein.

    Jens

  4. #4
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Weiss nicht wie das in QT funktioniert, aber für eine Animation brauchst du normalerweise Doppelbufferung (normalerweise wird der Bildschirm gelöscht, dann das Bild gezeichnet usw. Bei Doppelbufferung wird zuerst im Hintergrund das nächste Frame gezeichnet und dann auf einen Schlag direkt neu gezeichnet. Somit vergeht das durch das löschen verursachte Flackern. Nachteil ist, dass das gesamte relativ viel Ressourcen verbraucht. PS: Bei neueren Spielen wird oft auch Dreifachbufferung verwendet).

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Qt macht ansich schon double buffering.

    Man kann das Redraw Verhalten mit Widget Flags beeinflussen.

    zB habe ich bei einem Scrollview mit viel Aktivität folgende Kombination
    Code:
    View::View(Document* doc, QWidget* parent, const char* name)
            : QScrollView(parent, name, Qt::WResizeNoErase | Qt::WRepaintNoErase |
                                        Qt::WNorthWestGravity | Qt::WPaintClever),
    Bin mir nicht sicher, was das im einzelnen bewirkt, hab das auch von woanders kopiert

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •