2009-08-21 6 views
7

Ok, en utilisant Qt, j'aimerais savoir comment détecter l'état actuel de la souris à tout moment - sans un MouseEvent. En utilisant QCursor :: pos(), vous pouvez obtenir sa position, mais y a-t-il un moyen de déterminer l'état actuel des boutons?Comment détecter l'état de la souris dans Qt sans MouseEvent

Fondamentalement, je cherche à vérifier l'état de la souris quand un temporisateur se déclenche, donc il ne sera pas lié à un événement MouseEvent particulier, et donc il n'y a aucun MouseEvent à interroger. J'ai besoin de savoir comment interroger l'état de la souris - en particulier l'état des boutons - sans avoir un MouseEvent. Oh, et j'utilise Qt 3, donc si une telle fonction a été ajoutée dans Qt 4 mais pas dans Qt 3, ça ne m'aide pas beaucoup (même si ça serait quand même bien de savoir).

Répondre

1

Est-ce une exigence absolue que vous n'utilisiez pas MouseEvent? Ou pouvez-vous utiliser MouseEvents indirectement?

Si vous créez une variable booléenne pour chaque bouton et que vous la mettez à jour avec des événements enfoncés/relâchés de la souris, vous pouvez simplement regarder les valeurs des valeurs booléennes correspondantes lorsque le temporisateur se déclenche.

+0

Il ne peut pas être lié à un événement. Je veux dire, s'il y avait une fonction qui vous donnait l'état actuel de la souris en retournant un MouseEvent, ce serait bien, mais je ne peux pas gérer un événement. Je dois être capable de simplement demander l'état actuel de la souris sans avoir à m'inquiéter des événements qui ont ou n'ont pas été déclenchés. –

+0

Pourquoi n'avez-vous pas accès aux événements? Etes-vous inquiet pour la performance? Comment votre code s'exécute-t-il dans une interface graphique sans envoi en raison d'un événement? – Bill

+0

C'est un système complexe qui n'est certainement pas sans bug, et je ne peux pas garantir que je ne manquerai aucun événement. Donc, pendant qu'il est configuré pour que la minuterie ne se déclenche que lorsque la souris est dans l'état correct, je dois pouvoir vérifier l'état de la souris quand elle s'éteint afin de garantir qu'aucun événement ne passe par les fissures. –

14

Qt::MouseButtons QApplication::mouseButtons() [static]:

Renvoie l'état actuel des boutons de la souris. L'état actuel est mis à jour de façon synchrone lorsque la file d'événements est vidée des événements qui vont changer spontanément l'état de la souris (événements QEvent::MousePress et QEvent::MouseRelease).

Il convient de noter cela peut ne pas refléter les boutons réels tenue le dispositif de theinput au moment de l'appel, mais plutôt les boutons de la souris comme dernière rapportés dans l'un des événements ci-dessus. Si aucun bouton de la souris est maintenu Qt::NoButton est renvoyé.

Édition: hmm, je viens de remarquer que vous avez posé des questions sur Qt3.3. Cette réponse s'applique à Qt4 j'ai peur.

+0

Eh bien, comme je l'ai dit dans la question, il est toujours bon de savoir s'il y a moyen de faites-le en qt4 même s'il n'y en a pas en qt3.Si rien d'autre, je pourrais l'utiliser dans une future version de l'application en question (et c'est toujours bon d'en savoir plus sur ce genre de chose). La version actuelle, cependant, est en qt3, donc à moins qu'il y ait un moyen de le faire en qt3, alors je n'ai pas de chance pour le moment. Mais si c'est en qt4 et non en qt3, cela montre que trolltech continue à améliorer qt et à en faire une meilleure boîte à outils. –

Questions connexes