2010-03-03 12 views
1

J'écris un petit utilitaire GUI dans Qt4 qui utilise un QGraphicsScene. L'un des éléments suit la souris dans le plan horizontal au fur et à mesure que vous le déplacez, et le maintien d'une touche de modification vous permet de modifier la rotation de l'élément. Lorsque vous faites pivoter des objets, je voudrais que le curseur de la souris se transforme en une flèche sinueuse (ou quelque chose) et se verrouille visuellement en place, de sorte que le déplacement affecte l'élément mais pas le curseur de la souris lui-même. Le fait de relâcher le modificateur placerait le curseur (précédemment invisible) à son point d'origine: afin d'empêcher l'élément de "sauter" dans la nouvelle position horizontale de la souris après, ce qui est mon problème principal.Qt4: Verrouillage du curseur de la souris en cours de manipulation QGraphicsItem

J'ai vraiment aucune idée de la façon de mettre en œuvre ce dans Qt4 qui n'implique pas faire des choses horribles comme:

  • Lorsque le modificateur est un magasin appuyé sur la position actuelle de la souris
  • Switch le curseur sur une image bitmap de rien
  • dessiner une certaine façon un faux curseur dans le lieu d'origine (!?)
  • Supprimer le curseur faux et changer la position de la souris en arrière lorsque vous avez terminé

Soyez très reconnaissant si quelqu'un peut trouver un meilleur moyen d'y parvenir. Je ne suis pas très attaché à l'idée de curseur fixe de la souris en premier lieu mais c'est la seule façon que je peux penser pour contourner ce problème avec un système de contrôle qui fonctionne plutôt bien. Editer: J'ai essayé le schéma de la merde que j'ai décrit ci-dessus et a couru dans des problèmes en déplaçant la position de la souris par programmation. J'essaie toujours de me souvenir où j'ai déjà utilisé un système similaire: en gros, c'était un bouton rotatif. Vous avez cliqué dessus et déplacé la souris de haut en bas, ce qui a fait tourner le bouton. Lorsque vous avez relâché le bouton de la souris, le pointeur était de retour là où vous l'aviez initialement placé, sur le bouton.

Répondre

1

Que diriez-vous d'utiliser un filtre d'événement pour intercepter QMouseEvents, pendant que cela se passe?

+0

Merci beaucoup pour la suggestion utile. J'ai regardé vers le haut et le filtre d'événement ressemble à la meilleure manière d'aller ici (et pour beaucoup d'autres choses - je ne les ai jamais utilisées auparavant.) J'ai essayé d'implémenter la méthode (horrible) que j'ai décrite mais j'ai rencontré des problèmes étranges essayant de manipuler la position réelle du pointeur de la souris (par opposition au curseur), et finalement abandonné pour un schéma très différent qui a une odeur similaire de mauvais code. – Mikesname

+0

BTW, je suis sûr que j'ai vu la chose curseur fixe en action sur Windows pour, par exemple. déplacer des boutons virtuels sur des synthétiseurs logiciels et autres, donc je serais toujours intéressé de savoir comment vous faites cela. – Mikesname