Seite 1 von 1

QGraphicsView und drawBackground()

Verfasst: 25. März 2010 15:08
von mathies
Hallo,

ich habe in meinem View die drawBackground() Methode überschrieben um etwas Benutzerdefiniertes anzuzeigen. Das funktioniert auch ganz gut es gibt nur ein Problem:

Wenn ich die Scene verschiebe, dann wird auch der Hintergrund verschoben, das soll so nicht sein. In der drawBackground() Methode habe ich schon nach dem Rechteck geschaut was da übergeben wird und das sind genau die Scenekoordinaten der View-Eckpunkte, sollte somit also eigentlich passen. Leider scheint das QGraphicsView::drawBackground( painter, rect ), welches ich dann noch aufrufe, das völlig kalt zu lassen, welches rect da angegeben wird.

Wie kann ich erreichen, dass mein Hintergrund stabil im View angezeigt wird auch wenn ich die Scene bewege?

Gruß

Verfasst: 25. März 2010 19:53
von upsala
Du hast noch das Problem, daß bei jedem Update nur ein Teil der Ansicht geupdatet wird und nicht die gesamte View und somit jede Menge Artefakte bekommst.

Verfasst: 25. März 2010 22:40
von mathies
Davon habe ich bisher nichts bemerkt - das Darstellen an sich geht super und sehr flott.

Was mir fehlt ist im Moment nur die Möglichkeit zu bestimmen wo die drawBackground() Methode meinen Inhalt hinzeichnet. Muss ich da irgendwie noch das paintEvent() anfassen?
Es soll praktisch nur der Ausschnitt der Scene welcher vom View "abgedeckt" wird mit Inhalt gefüllt werden. Bisher verschiebt sich alles sobald ich die Scene bewege :(

Verfasst: 26. März 2010 10:25
von mathies
Hallo,

ich habe es jetzt soweit hinbekommen indem ich im QGraphicsView das paintEvent() überschrieben habe und manuell die drawBackground Methode mit einem festen Rechteck aufrufe.

Ich brauche jedoch auch noch das Standard paintEvent() um alle Items usw zu zeichnen. Gibt es da eine Möglichkeit die drawBackground() Methode aus diesem event auszuschließen? Diese wird nämlich im Standard paintEvent auch nochmal aufgerufen und macht alles wieder futsch. Im Moment setze ich ein Flag und ignoriere den drawBackground Aufruf des paintEvents aber ob das immer funktioniert?