Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

25.10.2014, 19:44

[Qt5] QGraphicsItem an Maus "anhängen"

Hallo,

ich habe ein custom QGraphicsItem, welches ich gerne, während die linke Maustaste bereits gedrückt ist, so registrieren würde, das man es direkt per Mausbewegung verschieben kann.
Um mal ein wenig Background zu liefern:

- durch drücken der linken Maustaste wird ein QGraphicsItem in der Szene unterhalb des Mauszeigers platziert, welches noch ein paar ChildItems besitzt.
- nachdem das Item in der Szene platziert wurde, soll eines der ChildItems direkt per Mausbewegung verschiebbar sein, ohne das ich die Maus noch ein 2. mal drücken muss.

Wie stelle ich das an?

https://qt.gitorious.org/qt/qt/source/57…raphicsitem.cpp
Dort habe ich ab Zeile 7056 den Code für die Basis mousePressEvent Implementierung gefunden, bringt mich aber nur bedingt weiter, da hier nur das Event akzeptiert wird, und nicht weiter behandelt.
Ich müsste also theoretisch dieses Event selbst versenden. Aber wie mache ich das?
Oder gibt es dafür bereits eine bessere Lösung?
Habe mir dafür auch schon "grabMouse" angeschaut, aber das scheint leider so nicht zu funktionieren.

mfg

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »anti-freak« (25.10.2014, 19:50)


2

25.10.2014, 21:15

Naja, das ich das könnte ist mir schon klar. Nur ist das wiederum lediglich hässliches gehacke, was ich vermeiden möchte. Gibt es keinen Weg dem Qt Framework mitzuteilen, das sich ab jetzt dieses Item am Mauszeiger befindet und damit gemoved werden soll?

3

26.10.2014, 13:52

Ok, hab mich vll ein wenig missverständlich ausgedrückt.

Ich kann das QGraphicsItem ja bereits bewegen, wenn ich eben nach dem Klick, die Taste los lasse und dann noch einmal klicke. Dementsprechend gibt es ja bereits Code, der für die Bewegung da ist. Überschreibe ich nun die "mouseMoveEvent" Methode, um solch ein Verhalten ebenfalls zu erzwingen, produziere ich ja lediglich redundanten Code.
Ganz davon abgesehen, das bei QGRpahicsItems die mouseMoveEvent Methode erst dann aufgerufen wird, wenn sie auch ein "mousePressEvent" erhalten hat, was ja auch nicht passiert ist.
Wurde das Item nicht geklickt, werden von vorn herein schon alle mouse Moves verworfen.

Dein anderer Vorschlag läuft ja darauf hinaus, das ich ab diesem Zeitpunkt den QCursor benutze, um mir praktisch oben genanntes Verhalten zu simulieren.
Ich müsste also erstmal an einer Stelle speichern, welches Item gerade gedrückt wird, um dann den MouseMove zu verfolgen.
Und das finde ich dann doch ziemlich hacky ;)

mfg

Werbeanzeige