La génération (simulation) de faux événements de la souris dans Qt
J'ai une application Qt (serveur) qui reçoit les positions de la souris et de l'etat ( de la souris enfoncé, publié ou de déplacement de la souris) sur le réseau local à partir d'une autre application Qt. J'ai lu dans l'état de la souris et de le positionner correctement, mais je ne suis pas en mesure de générer de faux messages dans le serveur d'application pour simuler le déplacement de la souris, la souris enfoncé événements.
Le serveur a de la logique dans QGraphicsView à la poignée de déplacement de la souris, etc et tout fonctionne comme prévu quand il fait des commentaires de la souris sur la machine serveur.
Mais une fois que j'ai essayer de générer de faux mouseEvents par la lecture de la position de la souris et de l'etat envoyés à partir d'autres applications, il ne fonctionne pas.
Étonnamment, si je créer de faux événements et de les passer à la scène comme indiqué ci-dessous, il génère mouseMoveEvents mais je veux le faire pour QGraphicsView, comme c'est la logique de la manipulation de la souris dans l'application serveur.
Cela fonctionne :
QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
pressEvent.setScenePos(QPointF(100, 100));
pressEvent.setButton(Qt::LeftButton);
pressEvent.setButtons(Qt::LeftButton);
QApplication::sendEvent(pGraphicsScene, &pressEvent);
Cela ne marche pas :
QMouseEvent eve( (QEvent::MouseMove), QPoint(100,100),
Qt::NoButton,
Qt::NoButton,
Qt::NoModifier );
qApp->sendEvent(this , &eve);
Quelqu'un peut-il m'aider à comprendre pourquoi je ne peux pas générer de faux événements pour GraphicsView et comment cela peut-il être fait.
Grâce
yourGraphicsView->setMouseTracking(true)
pour l'activation de la détection de mouseMove événements?OriginalL'auteur user948999 | 2013-09-17
Vous devez vous connecter pour publier un commentaire.
Vous devez envoyer l'événement à la fenêtre d'affichage QWidget comme suit:
Quand je suis à l'envoi de l'événement à viewport(), l'événement n'arrive pas à l'objectif de la méthode. Mais lorsque le récepteur est présent, il fonctionne très bien!
OriginalL'auteur bunjee
Je pense que cela va fonctionner:
Si la sous-classe QGraphicsView et l'appeler à partir d'une méthode de la classe fille.
OriginalL'auteur Jeremy Friesner
Dans l'exemple qui ne fonctionne pas, est "ce" la vue graphique? Si oui, alors vous pouvez appeler mouseMoveEvent() directement comme suggéré par Jeremy. Si pas, essayez:
QApplication::sendEvent(myGraphicsView, &eve);
OriginalL'auteur Jason