Russian Qt Forum
Ноябрь 27, 2024, 19:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отловить глобальное нажатие кнопки мыши?  (Прочитано 7945 раз)
ddrtn
Гость
« : Ноябрь 16, 2010, 12:41 »

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

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Ноябрь 16, 2010, 12:47 »

QWidget::grabShortcut()
QObject::eventFilter()

Естественно, это будет работать, если окно вашего плейера будет иметь фокус.
Или вы имели в виду перехват клавиатуры/мыши для всего десктопа?
« Последнее редактирование: Ноябрь 16, 2010, 12:50 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
ddrtn
Гость
« Ответ #2 : Ноябрь 16, 2010, 12:59 »

Я имею ввиду именно весь десктоп.
(Мне поставлена такая задача (не учеба) избавиться от этого перехвата не могу, хотя по смыслу можно было просто управлять дочерним процессом).
Хорошо отрабатывает Qxt'шный QxtGlobalShortcut - но его не достаточно, поскольку QKeySequence не понимает мышь
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Ноябрь 16, 2010, 13:05 »

Цитировать
Мне поставлена такая задача...
А почему вам глобального shortcut-а мало?
И что-то я не понимаю зачем вам мышь.
Записан

Qt 5.11/4.8.7 (X11/Win)
ddrtn
Гость
« Ответ #4 : Ноябрь 16, 2010, 13:08 »

У устройства, на котором это будет работать, - тачскрин. Нет клавы. Там драйвера обрабатывают касание экрана как мышиный клик. При нажатии на экран, моя прожка должна уходить в себя. причем не важно, была ли она при этом в фокусе или нет.
Записан
ddrtn
Гость
« Ответ #5 : Ноябрь 16, 2010, 13:12 »

Грубо говоря, прожка должна работать как скринсейвер, но в то же время иметь возможность не занимать весь экран, работать в нескольких экземплярах (возможно на разных мониторах) и много чего другого. Прожка есть. работает. не хватает только такого функционала.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Ноябрь 16, 2010, 13:16 »

Я уверенно могу сказать, что прозрачно для других приложений под X11 такое не сделать.
Т.е. отловить нажатие можно через граб, а вот как его правильно доставить другому приложению...
Записан

Qt 5.11/4.8.7 (X11/Win)
ddrtn
Гость
« Ответ #7 : Ноябрь 16, 2010, 13:18 »

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

Ага. его нужно не просто поймать, но и отпустить дальше.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Ноябрь 16, 2010, 13:26 »

Теоретически без граб-а такое можно сделать через InputOnly окна.
Но Qt их не поддерживает. Да и писанины много будет и не факт, что будет работать всегда.
Записан

Qt 5.11/4.8.7 (X11/Win)
ddrtn
Гость
« Ответ #10 : Ноябрь 16, 2010, 13:34 »

Я, честно говоря, не подозреваю вообще, как на иксах такое сделать. под линем гуи только на qt и fox писал. Хотя, может быть, просто слушать устройства клавы и мыши и реагировать на их активность. отследить присутствие человека рядом хватит
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Ноябрь 16, 2010, 14:05 »

Цитировать
Хотя, может быть, просто слушать устройства клавы и мыши и реагировать на их активность.
Xlib API не позволяет этого. Может XInputExtension позволяет.
Записан

Qt 5.11/4.8.7 (X11/Win)
gogi
Гость
« Ответ #12 : Ноябрь 16, 2010, 14:15 »

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

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

>Подскажите, плз, может кто знает подобную либу, желательно, совместимую с Qt (предосталяющую Qt интерфейс).
Вот и займись.
Записан
mityane
Гость
« Ответ #13 : Октябрь 07, 2011, 13:43 »

Ага. его нужно не просто поймать, но и отпустить дальше.

 Интересно, а как Вы реализовали функцию  "и отпустить дальше"?
Записан
ddrtn
Гость
« Ответ #14 : Октябрь 07, 2011, 14:07 »

Честно говоря, уже и не помню вообще. Под виндой точно работало. под линем - не помню. вот сорцы кусочка.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.