Как я могу получить или быть в состоянии обработать mouseMoveEvent (s) вне моего окна виджета? - PullRequest
1 голос
/ 15 декабря 2011

Я пишу приложение Qt, которое воспроизводит анимацию постепенного появления всякий раз, когда мышь перемещается в определенную область экрана, и анимацию постепенного исчезновения, когда мышь перемещается из этой же области.

Я уже нашел подобный вопрос здесь в переполнении стека, однако, он не совсем отвечает на мой вопрос.( аналогичный вопрос здесь )

Если я установлю фильтр событий в приложение, смогу ли я видеть ВСЕ события в приложении, даже если оно находится за пределами окна моего виджета?

Если нет, я знаю об альтернативе, включающей QWidget :: grabMouse () внутри повторной реализации метода leftEvent ().Но если я это сделаю, смогу ли я взаимодействовать с чем-либо вне моего приложения?

edit: хотя я использую библиотеку Qt, мое приложение предназначено только для развертывания в Windows.

Ответы [ 3 ]

3 голосов
/ 15 декабря 2011

Я вполне уверен, что ответ отрицательный, потому что события вне ваших виджетов обрабатываются оконным менеджером ОС (и распространяются на все приложения, находящиеся в этом пространстве).

Однако вы можете получитьПозицию мыши в любом месте на экране, вызвав QCursor::pos(), вы можете опрашивать через регулярные промежутки времени, чтобы узнать, где находится мышь.

2 голосов
/ 16 декабря 2011

Вы можете попробовать создать полностью прозрачное окно, которое находится поверх области, в которой вы хотите получать события мыши, с флагами Qt::WindowStaysOnTopHint, Qt::FramelessWindowHint и Qt::ToolTip (последнее может препятствовать получению окнафокус), атрибут Qt::WA_TranslucentBackground и отслеживание мыши включены.

1 голос
/ 15 декабря 2011

Если вы работаете в Windows, вы можете создать глобальный хук для получения каждого сообщения мыши (непосредственно перед отправкой в ​​окно под указателем мыши). К сожалению, я не знаю, существует ли эта функциональность в других ОС.

...