Qt отпускание мыши при нажатии кнопки - PullRequest
2 голосов
/ 19 сентября 2011

Мне нужно определить, покидает ли указатель мыши мой пользовательский виджет, даже если кнопка мыши нажата.

Согласно этой записи , Qt не вызывает leaveEvent в случае нажатия кнопки, по крайней мере, в версии 4.4. Я работаю с 4.7.3, но все равно не получаю leaveEvent в описанном случае. Я также пробовал с различными событиями, связанными с перетаскиванием, но не повезло. У кого-нибудь есть идеи, как с этим бороться?

Ответы [ 3 ]

3 голосов
/ 20 сентября 2011

На самом деле есть даже лучшая опция, чем использование событий мыши родительского виджета: вы можете реализовать функцию mouseMoveEvent дочернего виджета и получить позицию QMouseEvent::pos() относительно верхнего левого угла виджета. , Это означает, что если вы знаете размер виджета (используйте, например, QWidget::rect()), вы можете вычислить в виджете, если указатель мыши все еще находится на виджете или нет, без необходимости изменять родительский виджет.

2 голосов
/ 19 сентября 2011

Ну, я сделал что-то похожее на @gregseth.

Напишите свой собственный MouseLeaveEvent, который вызывается из MouseMoveEvent когда позиция мыши находится за границей виджета.

Как сказано в документации Qt "События перемещения мыши будут происходить только при нажатии кнопки мыши"

1 голос
/ 19 сентября 2011

У меня такая же проблема. Единственный обходной путь, который я нашел, - это управлять событием mouseMove родительского виджета и проверять, находится ли позиция курсора внутри или за пределами границ виджета, на котором вы хотите событие.

...