В моей программе я бы хотел, чтобы mouseMoveEvent (событие QMouseEvent *) вызывалось всякий раз, когда мышь перемещается (даже когда она находится над другим окном).Получение MouseMoveEvents в Qt
Прямо сейчас, в моем файле mainwindow.cpp, у меня есть:
void MainWindow::mouseMoveEvent(QMouseEvent* event) {
qDebug() << QString::number(event->pos().x());
qDebug() << QString::number(event->pos().y());
}
Но это, кажется, называется только тогда, когда я нажимаю и перетащить мышью в то время как над окном самой программы. Я попытался назвать
setMouseTracking(true);
в конструкторе MainWindow, но это, кажется, не делать ничего по-другому (mouseMoveEvent еще только вызывается, когда я держу кнопку мыши, независимо от того, где он есть). Какой самый простой способ отслеживать положение мыши по всему миру?
Спасибо, что работает для получения непрерывных обновлений, когда мышь находится над окном приложения, но если мышь перемещается в другом месте, позиция не обновляется. – Switch
Чтобы отследить мышь за окном, вам нужно будет захватить мышь (см. QWidget :: grabMouse()). Поскольку все события мыши будут отправлены виджету, который захватил мышь, это предотвратит нормальное взаимодействие с другими виджетами, если только вы не захватите мышь только тогда, когда мышь покидает окно (в файле leaveEvent()), а затем отпустите мышь на enterEvent(). – baysmith
После добавления grabMouse() он все еще обновляется, когда мышь проходит над окном приложения. – Switch