Sto iniettando eventi di tastiera e mouse che stanno entrando nella rete nella mia applicazione Qt e uso QCoreApplication::postEvent
per questo. Le coordinate del mouse sono le coordinate assolute dello schermo.Come utilizzare QCoreApplication :: postEvent per iniettare eventi di input sintetici
QMouseEvent *event = new QMouseEvent(type, QPoint(x, y), mouse_button, mouse_buttons,
Qt::NoModifier);
QCoreApplication::postEvent(g_qtdraw.main.widget, event);
Inizialmente ho avuto solo un widget (a cui fa riferimento g_qtdraw.main.widget
) quindi ho semplicemente usato che uno come argomento ricevitore postEvent
. Ora la mia applicazione ha più di un widget e il codice sopra non fa quello che voglio più.
Un secondo widget è mostrato in modalità schermo intero e so che tutti gli eventi del mouse devono andare in questa finestra ma con il codice sopra sono ancora indirizzati al widget principale.
Come scegliere il widget corretto come ricevitore (quello sotto il mouse x, y coords)? Esiste un modo standard, in modo che Qt scelga il widget giusto o devo farlo da solo?
modificare
io uso i seguenti che funziona bene (Molte grazie 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);
}
Grazie, ho avuto modo di lavorare usando il tuo suggerimento. Ho anche dovuto usare receiver-> mapFromGlobal (pos) affinché le coordinate fossero corrette. – trenki