W moim programie chciałbym wywołać mouseMoveEvent (QMouseEvent * event) za każdym razem, gdy mysz się porusza (nawet gdy jest nad innym oknem).Uzyskiwanie MouseMoveEvents w Qt
Teraz, w moim pliku mainwindow.cpp, mam:
void MainWindow::mouseMoveEvent(QMouseEvent* event) {
qDebug() << QString::number(event->pos().x());
qDebug() << QString::number(event->pos().y());
}
Ale to wydaje się być wywołana tylko po kliknięciu i przeciągnij myszą, podczas gdy nad oknem samego programu. Próbowałem nazywając
setMouseTracking(true);
w konstruktorze MainWindow, ale to nie wydaje się, aby zrobić coś inaczej (mouseMoveEvent nadal jest wywoływana tylko kiedy przytrzymaj przycisk myszy, niezależnie od tego, gdzie to jest). Jaki jest najłatwiejszy sposób śledzenia pozycji myszy na całym świecie?
Dziękujemy, że działa w celu uzyskania ciągłych aktualizacji, gdy mysz znajduje się nad oknem aplikacji, ale jeśli mysz zostanie przeniesiona gdzie indziej, pozycja nie zostanie zaktualizowana. – Switch
Aby śledzić mysz za oknem, musisz złapać mysz (zobacz QWidget :: grabMouse()). Ponieważ wszystkie zdarzenia myszy będą wysyłane do widgetu, który złapał mysz, uniemożliwi to normalną interakcję z innymi widżetami, chyba że pobierzesz mysz tylko wtedy, gdy mysz opuści okno (w funkcji leaveEvent()), a następnie zwolnij mysz na enterEvent(). – baysmith
Po dodaniu metody grabMouse(), wciąż aktualizuje się tylko wtedy, gdy mysz przechodzi nad oknem aplikacji. – Switch