[gelöst] QGraphicsView/QGraphicsView update/repaint

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

[gelöst] QGraphicsView/QGraphicsView update/repaint

Beitrag von mathies »

Hallo,

ich habe ein View/Scene System wo ich relativ große Bilddateien anzeigen lasse. Wenn ich nun zoome und die Scene verschiebe, kommt es sehr oft vor, dass Bereiche nicht aktualisiert werden (bleiben weiß oder es sind alte Bildfragmente enthalten). Dieser Zustand bleibt so lange erhalten bis ich auf eine andere Anwendung oder auf den Windows-Desktop klicke. Dann wird auf einmal alles korrigiert und korrekt dargestellt.

Meine Frage ist, welche Funktion Qt dann aufruft, dann würde ich das nämlich selbst tun. Habe es mit update() und repaint() im QGraphicsView probiert, da tut sich aber gar nix :(

Danke.

Edit:
Ich habe gerade bemerkt, dass ab einer gewissen Zoomstufe mein manuelles repaint() einfach ignoriert wird. Dadurch wird auch nix aktuallisiert. Erst wenn ich woanders hinklicke (also ein anderes Fenster wähle oder den Windows Hintergrund) bekomme ich das paintEvent. Hat jemand eine Idee warum das so ist?
Zuletzt geändert von mathies am 12. April 2010 15:41, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich gehe davon aus, daß du deine Items selbst erstellt hast und die Dimensionen deiner Items falsch zurückgibst.
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Hallo,

im Moment gibt es noch gar keine Items. Es wird lediglich der Hintergrund gefüllt.

Zum Testen rufe ich im View einfach bei jedem MouseReleaseEvent() die repaint() Funktion auf und bin davon ausgegangen, dass dann die paintEvent(QPaintEvent* event) Funktion, die ich auch selbst implementiert habe, aufgerufen wird. Dies ist aber nicht der Fall ab einer gewissen Zoomstufe :?:

Diese banale Sache muss doch eigentlich funktionieren, oder? Tut es aber nur bis zu einer gewissen Zoomstufe. Danach wird das paintEvent() nur aufgerufen wenn man den Fokus auf eine andere Anwendung lenkt :(
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag von mathies »

Ok,

hab meinen Fehler gefunden. Warum auch immer hat das Update über die ganze Scene nicht geklappt:

Code: Alles auswählen

scene->update( scene->sceneRect() );
Bei mir funktioniert jetzt:

Code: Alles auswählen

scene->update();
Grüße
Antworten