Zeichenroutine optimieren

Alles rund um die Programmierung mit Qt
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

marvel hat geschrieben: Dennoch wird bei einem Klick auf den Button gleich zweimal die paintevent Methode aufgerufen. Dies möchte ich irgendwie unterbinden. Gibt es eine Möglichkeit dieses Verhalten zu ändern oder kennt jmd eine Alternative ?
Du hast noch immer nicht verstanden, was dir upsala und franzf vermitteln wollten:

Das paintEvent eines (Child-)Widgets wird grundsätzlich vom System ausgelöst "wenn es notwendig ist", also so in etwa:
* Wenn die Fenster-Geometry verändert wird (Resize, Move usw.)
* Beim Ändern von Min/Max des Fensters
* Wenn sich ein gewisser Prozentsatz des Fensters ändert, so dass sich ein kompletter "Redraw" des Fensters lohnt (das ist vermutlich bei dir mit dem Button der Fall)
* Wenn die Daten des Widgets selbst ändern (dann muss das Widget sich selbst um das Event bemühen (mit "update()")

Daher muss ein paintEvent-Code mehr oder weniger unabhängig von der Anzahl Aufrufe sein! Denn: auch wenn du z.B. 25x pro Sekunde ein update() auslöst, kann es trotzdem weitere Events geben (wenn der User am Fenster rüttelt..)

Bei zeitabhängigen oder sehr aufwendigen Operationen, muss daher die Bereitstellung der Bilddaten und das Zeichnen getrennt werden. Helfen kann daher -wie erwähnt- ein Buffer dazwischen, so dass der Bildbuffer dann ändert wenn er muss (z.B. wenn bei gezoomt wird), aber das beim Zeichnen vollkommen egal ist...

hth..
marvel
Beiträge: 105
Registriert: 9. August 2009 07:41

Beitrag von marvel »

Danke für deine ausführliche Antwort. Ich habs jetzt verstanden und werde das Konzept mit dem Buffern umsetzen.
Antworten