Koordinaten von Mausklick in QGraphicView

Alles rund um die Programmierung mit Qt
Antworten
ibex
Beiträge: 5
Registriert: 28. Juni 2010 16:33

Koordinaten von Mausklick in QGraphicView

Beitrag von ibex »

Hallo zusammen
Für ein Geografie-Lernprogramm muss ich bei einem Klick auf eine Karte die Koordinaten des Klicks erhalten.
Die Idee ist, dies dann als Signal eines von QGraphicView abgeleiteten eigenen Widgets zu implementieren.
Leider habe ich ausser der Dokumentation zu QMouseEvent, mit der ich nicht weiterkomme, nichts gefunden.
Ich wäre dankbar für ein kurzes, funktionsfähiges Codebeispiel, das mir weiterhelfen könnte.

Gruss:
Adrian
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Wenn du mit QGraphicsView arbeitest, hast du sicher irgendwelche QGraphicsItems. Dort gibt es ein mousePressEvent, welches implementiert werden kann. Du kannst aber auch eine eigene GeographyScene (o.Ä.) von QGraphicsScene ableiten, da hast du dann direkt die passenden Korrdinaten.

Die QGraphicsView zeigt oft nur einen Ausschnitt, außerdem kann der Inhalt gezoomt sein. Du kannst zwar die Positiononen zwischen view<->scene umrechnen (mapFromScene/mapToScene), aber wenn du nichts machst was unbedingt das Ableiten von einer QWidget-Klasse (eben QGraphicsView) braucht (Spielerein mit dem viewport, Overlays malen, etc) solltest du eher von QGraphicsScene ableiten.

Sollte dich das nicht weiter bringen, musst du genauere Infos/Anforderungen/... posten. Sei dir aber im Klaren darüber, dass die Qt-Doku verdammt gut ist, und Fragen zu Sachen die mit einem Blick in der Doku ersichtlich sind hier gerne Unmut erzeugen. :)
ibex
Beiträge: 5
Registriert: 28. Juni 2010 16:33

Beitrag von ibex »

Ich bin mir durchaus bewusst, dass die Doku recht umfangreich ist, was jedoch nicht ausschliesst, dass ich als Qt-Einsteiger nicht alles verstehe.
Mein Hauptproblem ist das Implementieren von mousePressEvent. Ich habe dazu bisher nirgends ein Beispiel gefunden, welches ich verstanden habe.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

ibex hat geschrieben:Mein Hauptproblem ist das Implementieren von mousePressEvent. Ich habe dazu bisher nirgends ein Beispiel gefunden, welches ich verstanden habe.
Was willst du denn machen? Was erwartest du von mousePressEvent?

mousePressEvent wird automatisch aufgerufen, da klinkt sich Qt in das darunterliegende Window-System (X11 bei Linux, usw). QGraphicsView bekommt die Clicks vom System und reicht das an die scene (umgerechnet, natürlich) weiter. Egal wo du jetzt das mousePressEvent implementierst, das Vorgehen ist immer gleich: Einfach gewünschten Code ausführen ;)
Z.B. ein QMenu an event->pos() aufpoppen lassen, ein eigenes clicked(const QPointF&) emittieren, direkt Berechnungen durchführen um zu sehen, ob der Click wirklich in meiner Map auf "Bayern" war, usw.

Hast du dich auch schon mal durch die ganzen examples und demos gehangelt? Da sollte es auch einiges an Infos geben. (Qt-Installation/Sourcen sollten die enthalten)
Antworten