Wprowadzam iniekcje klawiatury i myszy, które przechodzą przez sieć do mojej aplikacji Qt i używam do tego celu QCoreApplication::postEvent
. Współrzędne myszy są absolutnymi współrzędnymi pikseli ekranu.Jak używać QCoreApplication :: postEvent do wstrzykiwania zdarzeń wejścia syntetycznego
QMouseEvent *event = new QMouseEvent(type, QPoint(x, y), mouse_button, mouse_buttons,
Qt::NoModifier);
QCoreApplication::postEvent(g_qtdraw.main.widget, event);
Początkowo miałem tylko jeden widżet (nawiązując do g_qtdraw.main.widget
), więc wystarczy, że jeden używany jako argument odbiornik do postEvent
. Teraz moja aplikacja ma więcej niż jeden widżet, a powyższy kod nie robi już tego, czego chcę.
Drugi widget jest wyświetlany w trybie pełnoekranowym i wiem, że wszystkie zdarzenia myszy muszą przejść do tego okna, ale z powyższym kodem są nadal kierowane do głównego widgetu.
Jak wybrać właściwy widżet jako odbiornik (ten pod myszką x, y coords)? Czy istnieje standardowy sposób, aby Qt wybrał odpowiedni widget lub czy muszę go sam śledzić?
edit
teraz używać następujących składników, które działa dobrze (wiele dzięki 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);
}
Dzięki, mam to do pracy przy użyciu podpowiedzi. Musiałem również użyć odbiornika-> mapFromGlobal (pos), aby współrzędne były poprawne. – trenki