Frage

Qt QGraphicsScene bietet einige nette Funktionen aus der Box. Benutzer können Objekte auswählen und verschieben

Ich möchte noch eine Sache - Benachrichtigungen erhalten, wenn Benutzer das Objekt fertig ist bewegt. Es gibt unteren Ebene Ereignisse wie Maus bewegen, drücken, Freigabe, aber ich würde nicht die Funktionalität neu zu implementieren möchten, die bereits vorhanden ist (die Objekte bewegen).

Die http://doc.trolltech.com/4.2/qgraphicsitem.html# itemChange Methode sieht so aus, aber es wird nicht aufgerufen, wenn der Benutzer das Objekt bewegt.

Ich bin mit Qt 4.6

Es stellt sich heraus Sie einen Flag setzen haben dieses Ereignis zu aktivieren:   item-> SetFlag (QGraphicsItem :: ItemSendsGeometryChanges, true);

Aber jetzt wird das Ereignis jedes Mal Artikels corrdinates Änderung gefeuert. Ich möchte nur ein Ereignis haben, wenn die Änderung durch den Benutzer durchgeführt wird.

War es hilfreich?

Lösung

Ich denke, dass der beste Weg, um die mouseRelease Veranstaltung setzt für Ihre Artikel, wenn es gebrannt wird, Sie werden in der Lage zu wissen, ob das Element bewegt wurde oder nicht. Wenn das Element bewegt wurde die Veranstaltung übernehmen, sonst das Ereignis an die Basisklasse senden.

Zum Beispiel:

 void YourItem::mouseReleaseEvent(QMouseEvent *event)
 {
     if (wasMoved()) {
         //do something and accept the event
     } else {
         // to the base class
         QGraphicsItem::mouseReleaseEvent(event);
     }
 }

WasMoved () ist Ihre Methode zu wissen, ob das Element verschoben wurde

Andere Tipps

Abgesehen davon, dass es nicht immer funktioniert, wie Sie nicht immer bekommen ein mouse ...

Der Code, der das Ziehen tut jedoch blockiert Code, so dass Sie es dort setzen, da der Code nur dann weiter, nachdem Sie Maustaste losgelassen und es funktioniert immer ... (QT 4.7 +)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top