Je suis injecté des événements du clavier et de la souris qui se rendent sur le réseau dans mon application Qt et utilisez QcoreApplication :: postEvent code> pour cela. Les coordonnées de la souris sont des coordonnées de pixels d'écran absolue. QMouseEvent *event = new QMouseEvent(type, QPoint(x, y), mouse_button, mouse_buttons,
Qt::NoModifier);
QCoreApplication::postEvent(g_qtdraw.main.widget, event);
3 Réponses :
Je suggérerais d'afficher du code comme selon le Documentation < / a> La signature est la suivante: Avez-vous essayé de donner un pointeur sur le ( EDIT: strong> Notez que qObject code> correspondant en tant que récepteur code> argument p > qwidget code> hériter qObject code>) p> p> p>
J'ai ajouté de nouvelles informations. Quand j'ai plus d'une fenêtre / widget, comment choisir le bon (celui sous la souris x, y)?
Ah, vous avez manqué les informations clés sur la façon dont vous vouliez décider du widget;)
Pouvez-vous utiliser Je ne m'attendrais pas à ce que vous fassiez cela pour les événements clés. Ils doivent être envoyés au widget ciblé ( Malheureusement, je n'ai pas testé de cela. P> P> qapplication :: widgettat () code > pour trouver le widget correct à la position, puis poster à cela? qapplication :: focuswidget () code>). P>
Merci, je l'ai eu pour travailler en utilisant votre allusion. J'ai aussi dû utiliser le récepteur-> Mapfromglobal (POS) pour que les coordonnées soient correctes.
Voici la réponse ajoutée à la question:
J'utilise maintenant ce qui suit qui fonctionne bien (merci beaucoup à Dusty Campbell ): P>
QPoint pos(x, y); QWidget *receiver = QApplication::widgetAt(pos); if (receiver) { QMouseEvent *event = new QMouseEvent(type, receiver->mapFromGlobal(pos), mouse_button, mouse_buttons, Qt::NoModifier); QCoreApplication::postEvent(receiver, event); }
@trenki - Si vous ajoutez votre réponse comme une réponse dans un bloc, veuillez me le faire savoir pour que je puisse supprimer cela. Nous n'avons toujours pas de moyen d'attribuer une réponse au PO pour des situations comme celles-ci.
Veuillez placer des réponses dans les blocs de réponse. Plus tard, vous pouvez accepter votre propre réponse. Voir aussi Comment accepter un travail de réponse?