QGraphicsView und drawBackground()

Alles rund um die Programmierung mit Qt
Antworten
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

QGraphicsView und drawBackground()

Beitrag 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ß
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag 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 :(
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag 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?
Antworten