QPaintEvent Performance Problem

Alles rund um die Programmierung mit Qt
Antworten
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

QPaintEvent Performance Problem

Beitrag von joebar »

Hallo,

ich habe ein QWidget auf dem ich svg Bilder zeichne. Ich habe ein Hintergrundbild und ein bewegliches Objekt. Wenn ich das bewegliche Objekt bewege wird update() gerufen um das paintEvent auszuloesen.

In dem PaintEvent muss ich natuerlich auch den Hintergrund neu zeichnen obwohl sich nur das bewegliche Objekt verschiebt. Das Hintergrundbild "berechnet" sich in dem in einem Konfig File ausgelesen wird aus welchen Elementen es aufgebaut werden soll, das Bild besteht aus knapp 700 Elementen.

Wenn ich das Fenster vergroessere kann ich damit leben dass das Bild nur verzoegert angepasst wird. Wenn ich aber das bewegliche Objekt bewege geht das nur sehr laaaaaangsam, es ist wesentlich fluessiger wenn das Hintergrundbild nicht da ist. Logisch irgendwie. Aber was kann ich da besser machen?

Danke!
J.
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

wenn du ein graphicsview verwendest, kannst du den hintergrund puffern. so zeichnest du auch wirklich nur das modell im vordergrund.
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

danke werde mir das mal anschauen und mich dann ggf. wieder melden... ich habe die API Dokumentation dazu gefunden (setCacheMode) , falls jemand noch ein Coding Beispiel zur Unterstuetzung kennt bin ich dankbar fuer einen Link.
ObeliX
Beiträge: 59
Registriert: 14. November 2007 17:47

Beitrag von ObeliX »

ansonsten kannst du dein hintergrundbild doch in ein buffer-image rendern und im paint-event dieses anzeigen anstatt es jedesmal aus den 700 elementen gemäß konfig zusammenzubauen. diese hintergrundbild-konstruktion muß doch nur erfolgen, wenn sich was ändert ... resize oder konfigänderung o.ä..


gruß Obel
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Mit dem Buffer image meinst du einmal das QPainter Objekt erstellen als eine Klassenvariable und dann einfach aufrufen? Oder meinst du wirklich irgendwie ein Pixmap erstellen?

Danke!
Antworten