Question

QGraphicsScene de Qt offre une fonctionnalité bien hors de la boîte. Utilisateur peut sélectionner les objets et les déplacer

Je veux une chose - recevoir des notifications lorsque l'utilisateur a terminé de déplacer l'objet. Il y a des événements de niveau inférieur, comme mouvement de la souris, appuyez sur, la libération, mais je n'aiment réimplémenter la fonctionnalité qui est déjà là (déplacer les objets).

Le http://doc.trolltech.com/4.2/qgraphicsitem.html# itemChange méthode ressemble, mais il est pas appelé lorsque l'utilisateur déplace l'objet.

J'utilise Qt 4.6

Il s'avère que vous devez définir un indicateur pour permettre à cet événement:   item-> setFlag (QGraphicsItem :: ItemSendsGeometryChanges, true);

Mais l'événement est tiré de chaque élément de temps de changement de corrdinates. Je veux avoir un événement que lorsque le changement est effectué par l'utilisateur.

Était-ce utile?

La solution

Je pense que la meilleure façon met en œuvre l'événement mouseRelease pour vos articles, quand il est tiré, vous serez en mesure de savoir si l'article a été déplacé ou non. Si l'élément a été déplacé d'accepter l'événement, sinon envoyer l'événement à la classe de base.

Par exemple:

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

WasMoved () est votre méthode pour savoir si l'élément a été déplacé

Autres conseils

Sauf que cela ne fonctionne pas toujours comme vous ne recevez pas toujours mouseReleaseEvent ...

Le code qui fait le traînement est le code bloque cependant, vous pouvez le mettre là-bas, car le code ne continuera après avoir relâché le bouton de la souris et il fonctionne toujours ... (QT 4.7 +)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top