Seite 1 von 1

QPaintEvent Performance Problem

Verfasst: 30. Juni 2008 22:46
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.

Verfasst: 1. Juli 2008 00:08
von slash-ex
wenn du ein graphicsview verwendest, kannst du den hintergrund puffern. so zeichnest du auch wirklich nur das modell im vordergrund.

Verfasst: 1. Juli 2008 09:51
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.

Verfasst: 1. Juli 2008 12:38
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

Verfasst: 1. Juli 2008 22:19
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!