Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vux от Ноябрь 14, 2012, 14:59



Название: глобальное отлавливание событий мыши\клавы
Отправлено: vux от Ноябрь 14, 2012, 14:59
Можно ли отслеживать движение мыши, например, без видимых виджетов? То есть назначил eventFilter на QApplication и отлавливаешь мышь пока не отключиться фильтер, внезависимости от того что под мышой, да хоть и над левое окно левой программы.

Или может както вывести виджет нужного куска и чтоб он был невидимым но чтобы все события ловились.


Название: Re: глобальное отлавливание событий мыши\клавы
Отправлено: GreatSnake от Ноябрь 14, 2012, 15:01
Средствами Qt нельзя, а вообще поиск рулит, т.к. таких вопросов здесь полно уже было.


Название: Re: глобальное отлавливание событий мыши\клавы
Отправлено: kibsoft от Ноябрь 14, 2012, 15:18
Недавно постил в кладовую готовых решений: Ловим глобальные события системы с помощью хуков (клавиатура, мышь и т.д.) (http://www.prog.org.ru/topic_23468_0.html)
Это решение для винды.


Название: Re: глобальное отлавливание событий мыши\клавы
Отправлено: ecspertiza от Ноябрь 14, 2012, 16:03
или подрубать либу Qxt , в ней что то похожее было, вроде как работает кроссплатформенно :)


Название: Re: глобальное отлавливание событий мыши\клавы
Отправлено: Bepec от Ноябрь 14, 2012, 18:07
Ну ненадо так пугать сразу.

Отслеживать движение мыши можно - QCursor::pos позволяет получать координаты мыши в текущий момент, даже если на экране не имеется виджетов (hide или tray).

Прикручиваем к нему таймер и получаем то что надо за короткое время.

Конечно это не очень корректно по отношению к коду и практицизму, но это:
1) работает
2) не грузит систему
3) кроссплатформенно(по идее, что QCursor:pos отрабатывать будет одинакого в любых системах)


Название: Re: глобальное отлавливание событий мыши\клавы
Отправлено: vux от Ноябрь 14, 2012, 20:36
Тут такая ситуация:
1. Есть программа не кутешная.
2. В ней встроен питон 2.6.
3. В системе у меня (линукс) стоит куте 4.8.3. Я собрал пикуте и запускаю в цикле программы.
4. Хочеться над другим не-кутешным окном на определенный промежуток времени захватывать координаты мыши при каждом ее движении средствами пикуте.


Название: Re: глобальное отлавливание событий мыши\клавы
Отправлено: Bepec от Ноябрь 14, 2012, 20:48
Попробуй и посмотри как работает QCursor::pos(). Если оно возвращает правильные координаты используй его.

PS хотя если
Цитировать
над другим не-кутешным окном
, то это уже должны быть платформозависимые функции. Ибо определить что окно под курсором - можно лишь платформенными функциями.


Название: Re: глобальное отлавливание событий мыши\клавы
Отправлено: vux от Ноябрь 14, 2012, 20:52
Про qcursor знал просто, не пользовавшись таймерами, не пологал как прикрутить не виджетный отлов этого qcursor.
Спасибо буду пробовать


Название: Re: глобальное отлавливание событий мыши\клавы
Отправлено: Igors от Ноябрь 14, 2012, 21:19
4. Хочеться над другим не-кутешным окном на определенный промежуток времени захватывать координаты мыши при каждом ее движении средствами пикуте.
В расчетных задачах эту роль играет метод Эйлера. Всем давно известно что он плох - патологически неустойчив. Но он настолько привлекателен для реализации что интерес к нему вспыхивает снова и снова. И тут уж ничего не попишешь, просто "это пройдет".