Estoy inyectando eventos de teclado y mouse que están llegando a través de la red en mi aplicación Qt y uso QCoreApplication::postEvent
para esto. Las coordenadas del mouse son coordenadas absolutas de píxeles de pantalla.Cómo utilizar QCoreApplication :: postEvent para inyectar eventos sintéticos de entrada
QMouseEvent *event = new QMouseEvent(type, QPoint(x, y), mouse_button, mouse_buttons,
Qt::NoModifier);
QCoreApplication::postEvent(g_qtdraw.main.widget, event);
Inicialmente acababa de un widget (referenciado por g_qtdraw.main.widget
) por lo que simplemente usado que uno como el argumento receptor para postEvent
. Ahora mi aplicación tiene más de un widget y el código anterior ya no hace lo que quiero.
Se muestra un segundo widget en modo de pantalla completa y sé que todos los eventos del mouse tienen que ir a esta ventana, pero con el código anterior todavía se enrutan al widget principal.
¿Cómo elijo el widget correcto como el receptor (el que está debajo del mouse x, y coords)? ¿Hay una forma estándar, para que Qt elija el widget correcto o tengo que rastrearlo yo mismo?
edición
ahora el uso de los siguientes elementos que funciona bien (Muchas gracias a Dusty Campbell):
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);
}
Gracias, lo hice funcionar con tu pista. También tuve que usar el receptor-> mapFromGlobal (pos) para que las coordenadas fueran correctas. – trenki