3 Stimmen

Schwarzes Flackern beim Ändern der Größe eines durchsichtigen Qt-Widgets (nur wenn Aero aktiviert ist)?

Ich habe ein Qt-Widget der obersten Ebene mit dem FramelessWindowHint-Flag und dem WA_TranslucentBackground-Attribut eingestellt. Es hat mehrere untergeordnete Elemente, von denen jedes ein Bild darauf zeichnet. Sie befinden sich nicht in einem Layout. Stattdessen verschiebe ich sie einfach, wenn sich etwas ändert (die Größe kann nicht vom Benutzer verändert werden).

Das Fenster besteht aus zwei Staaten - einem großen und einem kleinen Staat. Wenn ich zwischen diesen beiden Zuständen wechsle, ändere ich die Größe des Fensters und positioniere die untergeordneten Elemente neu. Das Problem ist, dass bei der Größenänderung des Fensters kurz ein schwarzer Kasten auf der obersten Ebene des Fensters aufleuchtet, bevor die Bilder darüber gemalt werden.

Das Problem verschwindet, wenn ich Aero deaktiviere. Ich habe eine kurze Erwähnung dieses Problems in einem Artikel gefunden, der eine neue Version von Qt beschreibt (diese Version ist längst vorbei), aber es funktioniert immer noch nicht.

Haben Sie eine Idee, warum?

Gracias.

0voto

Eric Melski Punkte 15572

Ich habe keine speziellen Erfahrungen mit Qt, aber ich habe mit anderen Windowing Toolkits gearbeitet. Typischerweise sehen Sie diese Art von Blinken, wenn Sie Updates direkt auf den Bildschirm zeichnen. Die Lösung ist stattdessen die Verwendung von Doppelte Pufferung Das bedeutet im Grunde, dass Sie Ihre Aktualisierungen in einen Puffer außerhalb des Bildschirms rendern (eine Art Bitmap, im wahrsten Sinne des Wortes) und dann das gesamte aktualisierte Bild in einem einzigen, schnellen Vorgang auf den Bildschirm kopieren.

Der Grund, warum Sie das Flackern nur manchmal sehen, ist einfach ein Artefakt, das davon abhängt, wie schnell Ihr Bildschirm aktualisiert wird und wie schnell die Aktualisierungen gezeichnet werden. Wenn Sie "Glück" haben, erfolgen alle Aktualisierungen zwischen den Bildschirmaktualisierungen und Sie sehen möglicherweise kein Flackern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X