Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ddrtn от Ноябрь 16, 2010, 12:41



Название: Как отловить глобальное нажатие кнопки мыши?
Отправлено: ddrtn от Ноябрь 16, 2010, 12:41
Доброго времени суток!
Есть задача: по нажатию левой кнопки мыши или любой клавиши клавиатуры выполняющаяся программа должна (плейер) становиться на паузу или выключаться.
Это можно реализовать  используя, например, системный хук (в виндовз). Наверняка что-то такое есть и в X.
Однако же хотелось бы заюзать кроссплатформенную либу. Смотрел QXT - хорошо отлавливает глобальный шорткат, но не совсем то.
Подскажите, плз, может кто знает подобную либу, желательно, совместимую с Qt (предосталяющую Qt интерфейс).


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: GreatSnake от Ноябрь 16, 2010, 12:47
QWidget::grabShortcut()
QObject::eventFilter()

Естественно, это будет работать, если окно вашего плейера будет иметь фокус.
Или вы имели в виду перехват клавиатуры/мыши для всего десктопа?


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: ddrtn от Ноябрь 16, 2010, 12:59
Я имею ввиду именно весь десктоп.
(Мне поставлена такая задача (не учеба) избавиться от этого перехвата не могу, хотя по смыслу можно было просто управлять дочерним процессом).
Хорошо отрабатывает Qxt'шный QxtGlobalShortcut - но его не достаточно, поскольку QKeySequence не понимает мышь


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: GreatSnake от Ноябрь 16, 2010, 13:05
Цитировать
Мне поставлена такая задача...
А почему вам глобального shortcut-а мало?
И что-то я не понимаю зачем вам мышь.


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: ddrtn от Ноябрь 16, 2010, 13:08
У устройства, на котором это будет работать, - тачскрин. Нет клавы. Там драйвера обрабатывают касание экрана как мышиный клик. При нажатии на экран, моя прожка должна уходить в себя. причем не важно, была ли она при этом в фокусе или нет.


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: ddrtn от Ноябрь 16, 2010, 13:12
Грубо говоря, прожка должна работать как скринсейвер, но в то же время иметь возможность не занимать весь экран, работать в нескольких экземплярах (возможно на разных мониторах) и много чего другого. Прожка есть. работает. не хватает только такого функционала.


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: GreatSnake от Ноябрь 16, 2010, 13:16
Я уверенно могу сказать, что прозрачно для других приложений под X11 такое не сделать.
Т.е. отловить нажатие можно через граб, а вот как его правильно доставить другому приложению...


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: ddrtn от Ноябрь 16, 2010, 13:18
Досадно. Про Х11 я не знаю наверняка. Под виндовз можно. Очень надеялся, что если есть Глобал шорткат, то может быть и глобал mouse event.


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: ddrtn от Ноябрь 16, 2010, 13:21
Ага. его нужно не просто поймать, но и отпустить дальше.


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: GreatSnake от Ноябрь 16, 2010, 13:26
Теоретически без граб-а такое можно сделать через InputOnly окна.
Но Qt их не поддерживает. Да и писанины много будет и не факт, что будет работать всегда.


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: ddrtn от Ноябрь 16, 2010, 13:34
Я, честно говоря, не подозреваю вообще, как на иксах такое сделать. под линем гуи только на qt и fox писал. Хотя, может быть, просто слушать устройства клавы и мыши и реагировать на их активность. отследить присутствие человека рядом хватит


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: GreatSnake от Ноябрь 16, 2010, 14:05
Цитировать
Хотя, может быть, просто слушать устройства клавы и мыши и реагировать на их активность.
Xlib API не позволяет этого. Может XInputExtension позволяет.


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: gogi от Ноябрь 16, 2010, 14:15
Доброго времени суток!
Есть задача: по нажатию левой кнопки мыши или любой клавиши клавиатуры выполняющаяся программа должна (плейер) становиться на паузу или выключаться.
Это можно реализовать  используя, например, системный хук (в виндовз). Наверняка что-то такое есть и в X.
Однако же хотелось бы заюзать кроссплатформенную либу. Смотрел QXT - хорошо отлавливает глобальный шорткат, но не совсем то.
Подскажите, плз, может кто знает подобную либу, желательно, совместимую с Qt (предосталяющую Qt интерфейс).

Под виндовз сам знаешь как. Под линуксом можно на уровне иксов, а можно на более низком уровне: читать события напрямую от файлов устройств /dev/input/*(event, mouse, mice, ...).

>Подскажите, плз, может кто знает подобную либу, желательно, совместимую с Qt (предосталяющую Qt интерфейс).
Вот и займись.


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: mityane от Октябрь 07, 2011, 13:43
Ага. его нужно не просто поймать, но и отпустить дальше.

 Интересно, а как Вы реализовали функцию  "и отпустить дальше"?


Название: Re: Как отловить глобальное нажатие кнопки мыши?
Отправлено: ddrtn от Октябрь 07, 2011, 14:07
Честно говоря, уже и не помню вообще. Под виндой точно работало. под линем - не помню. вот сорцы кусочка.