Come ottenere gli eventi di spostamento degli elementi del report QGraphicsScene

StackOverflow https://stackoverflow.com/questions/2006433

  •  18-09-2019
  •  | 
  •  

Domanda

QGraphicsScene di Qt fornisce alcune funzionalità interessanti pronte all'uso:l'utente può selezionare gli oggetti e spostarli.

Voglio ancora una cosa: ricevere notifiche quando l'utente ha finito di spostare l'oggetto.Ci sono eventi di livello inferiore, come lo spostamento, la pressione, il rilascio del mouse, ma non vorrei reimplementare la funzionalità già presente (spostamento degli oggetti).

IL http://doc.trolltech.com/4.2/qgraphicsitem.html#itemChange il metodo assomiglia a questo, ma NON viene chiamato quando l'utente sposta l'oggetto.

Sto usando Qt 4.6

Si scopre che devi impostare un flag per abilitare questo evento:item->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);

Ma ora l'evento viene attivato ogni volta che cambiano le coordinate dell'oggetto.Voglio avere un evento solo quando la modifica viene apportata dall'utente.

È stato utile?

Soluzione

Penso che il modo migliore sia implementare l'evento mouseRelease per i tuoi articoli, quando verrà attivato sarai in grado di sapere se l'oggetto è stato spostato o meno.Se l'elemento è stato spostato, accetta l'evento, altrimenti invia l'evento alla classe base.

Per esempio:

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

WasMoved() è il tuo metodo per sapere se l'elemento è stato spostato

Altri suggerimenti

Solo che non può funzionare sempre come non sempre si ottiene un mouseReleaseEvent ...

Il codice che sta facendo il trascinamento sta bloccando il codice tuttavia, in modo da poter mettere là, come il codice continuerà solo dopo aver rilasciato il pulsante del mouse e funziona sempre ... (QT 4.7 +)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top