Bildschirmflickern bei neuzeichnen eines Widgets
Verfasst: 16. August 2006 15:45
Hi,
ich habe hier folgendes Problem:
Ich habe ein Widget (genaugenommen ein Frame in einem Widget), auf dem ich ein Pixmap zeichnen will. Dieses Pixmap muss 30 mal die Sekunde neu gezeichnet werden, und wandert quer über den Frame. Dazu habe ich die paintEvent() des Frames überschrieben. In QT4 klappte das zwar ruckelig, aber wurde sauber gezeichnet.
Jetzt musste ich wieder auf QT3 umstellen, und habe nun den Effekt dass das ganze ständig flickert. Ich habe dann herausgefunden, dass das Widget standardmässig gecleared wird vor einem paintEvent().
Gut, kein Problem, das kann man ja abstellen indem man das Qt::WNoAutoErase im Frame setzt. Dann allerdings muss man sich selbst ums übermalen aller Pixel kümmern. Wenn ich nun innerhalb meiner paintEvent() vor dem malen des Pixmaps ein fillRect im Frame mache, um das ganze Ding zu übermalen, flickert es wieder.
Es ist also so, dass jede Zeichenaktion direkt auf den Bildschirm gebracht wird, und es offensichtlich nicht möglich ist, erst einmal verschiedene Zeichenoperationen durchzuführen ohne diese gleich auf den Monitor zu bringen. Kann man sowas irgendwie unterdrücken? Also dass ich in einem Schritt ein fillRect und ein drawPixmap mache, und dann erst ein Screenupdate? Ich hoffe ihr versteht was ich meine!? Wenn nicht, bitte einfach nachfragen!
Ich entwickel unter Windows XP mit Visual Studio 2003 .NET und QT 3.3.6.
Viele Grüße,
Mamba
ich habe hier folgendes Problem:
Ich habe ein Widget (genaugenommen ein Frame in einem Widget), auf dem ich ein Pixmap zeichnen will. Dieses Pixmap muss 30 mal die Sekunde neu gezeichnet werden, und wandert quer über den Frame. Dazu habe ich die paintEvent() des Frames überschrieben. In QT4 klappte das zwar ruckelig, aber wurde sauber gezeichnet.
Jetzt musste ich wieder auf QT3 umstellen, und habe nun den Effekt dass das ganze ständig flickert. Ich habe dann herausgefunden, dass das Widget standardmässig gecleared wird vor einem paintEvent().
Gut, kein Problem, das kann man ja abstellen indem man das Qt::WNoAutoErase im Frame setzt. Dann allerdings muss man sich selbst ums übermalen aller Pixel kümmern. Wenn ich nun innerhalb meiner paintEvent() vor dem malen des Pixmaps ein fillRect im Frame mache, um das ganze Ding zu übermalen, flickert es wieder.
Es ist also so, dass jede Zeichenaktion direkt auf den Bildschirm gebracht wird, und es offensichtlich nicht möglich ist, erst einmal verschiedene Zeichenoperationen durchzuführen ohne diese gleich auf den Monitor zu bringen. Kann man sowas irgendwie unterdrücken? Also dass ich in einem Schritt ein fillRect und ein drawPixmap mache, und dann erst ein Screenupdate? Ich hoffe ihr versteht was ich meine!? Wenn nicht, bitte einfach nachfragen!
Ich entwickel unter Windows XP mit Visual Studio 2003 .NET und QT 3.3.6.
Viele Grüße,
Mamba