2010-10-10 31 views
1

J'ai un QGraphicsScene comme scène principale avec plusieurs QGraphicsItem mobiles dans celui-ci et un autre QGraphicsScene sur le dessus de la scène principale comme une superposition. La scène de superposition est exactement de la même taille que l'affichage de l'utilisateur, tandis que la scène principale est beaucoup plus grande, il faut donc la faire défiler automatiquement vers le haut et vers le bas.Comment déplacer un QGraphicsItem sur une autre scène sans perdre le grappin de la souris?

Si un élément de la scène principale va être déplacé, je veux supprimer cet élément de la scène principale et l'ajouter à la scène de superposition, laisser l'utilisateur déplacer l'élément dans la scène de superposition, et dès que la souris est relâchée la remettre sur la scène principale. Cela me permet de faire défiler automatiquement la scène principale lorsque l'objet s'approche des bords de l'écran.

Le problème est le suivant; Lorsqu'un élément est retiré de sa scène, il reçoit un événement QMouseUngrab, il n'est donc pas possible de continuer à déplacer l'élément sans le cliquer de nouveau dans la scène de superposition. J'ai essayé d'empêcher l'événement ungrab ou de générer un faux QMousePress dans le overlayscene, mais aucun d'eux n'a résolu le problème.

Avez-vous une idée de comment je peux commencer à déplacer un objet dans une scène et continuer à le déplacer dans une autre scène sans interruption?

En d'autres termes:

  1. QMousePress arrive dans la principale scène
  2. Plusieurs QMouseMove s et enfin un QMouseRelease devrait se produire dans la scène de superposition
  3. Juste après QMouseRelease l'article sera remis à la scène principale

Répondre

1

Ce que vous devez faire est d'utiliser le drag and drop framework. Vous pouvez commencer à faire glisser un système lorsque la souris quitte le canevas initial, puis, tant que votre scène de superposition accepte les données mime que vous avez empaquetées dans votre QDrag, les deux peuvent interagir.

C'est un système quelque peu frustrant, car il fournit la fonctionnalité de dénominateur le moins commun sur toutes les plates-formes. Mais il vous permettra de communiquer entre les deux widgets en une seule opération.