Russian Qt Forum
Ноябрь 27, 2024, 19:38
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Как отловить глобальное нажатие кнопки мыши?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как отловить глобальное нажатие кнопки мыши? (Прочитано 7942 раз)
ddrtn
Гость
Как отловить глобальное нажатие кнопки мыши?
«
:
Ноябрь 16, 2010, 12:41 »
Доброго времени суток!
Есть задача: по нажатию левой кнопки мыши или любой клавиши клавиатуры выполняющаяся программа должна (плейер) становиться на паузу или выключаться.
Это можно реализовать используя, например, системный хук (в виндовз). Наверняка что-то такое есть и в X.
Однако же хотелось бы заюзать кроссплатформенную либу. Смотрел QXT - хорошо отлавливает глобальный шорткат, но не совсем то.
Подскажите, плз, может кто знает подобную либу, желательно, совместимую с Qt (предосталяющую Qt интерфейс).
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #1 :
Ноябрь 16, 2010, 12:47 »
QWidget::grabShortcut()
QObject::eventFilter()
Естественно, это будет работать, если окно вашего плейера будет иметь фокус.
Или вы имели в виду перехват клавиатуры/мыши для всего десктопа?
«
Последнее редактирование: Ноябрь 16, 2010, 12:50 от GreatSnake
»
Записан
Qt 5.11/4.8.7 (X11/Win)
ddrtn
Гость
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #2 :
Ноябрь 16, 2010, 12:59 »
Я имею ввиду именно весь десктоп.
(Мне поставлена такая задача (не учеба) избавиться от этого перехвата не могу, хотя по смыслу можно было просто управлять дочерним процессом).
Хорошо отрабатывает Qxt'шный QxtGlobalShortcut - но его не достаточно, поскольку QKeySequence не понимает мышь
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #3 :
Ноябрь 16, 2010, 13:05 »
Цитировать
Мне поставлена такая задача...
А почему вам глобального shortcut-а мало?
И что-то я не понимаю зачем вам мышь.
Записан
Qt 5.11/4.8.7 (X11/Win)
ddrtn
Гость
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #4 :
Ноябрь 16, 2010, 13:08 »
У устройства, на котором это будет работать, - тачскрин. Нет клавы. Там драйвера обрабатывают касание экрана как мышиный клик. При нажатии на экран, моя прожка должна уходить в себя. причем не важно, была ли она при этом в фокусе или нет.
Записан
ddrtn
Гость
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #5 :
Ноябрь 16, 2010, 13:12 »
Грубо говоря, прожка должна работать как скринсейвер, но в то же время иметь возможность не занимать весь экран, работать в нескольких экземплярах (возможно на разных мониторах) и много чего другого. Прожка есть. работает. не хватает только такого функционала.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #6 :
Ноябрь 16, 2010, 13:16 »
Я уверенно могу сказать, что прозрачно для других приложений под X11 такое не сделать.
Т.е. отловить нажатие можно через граб, а вот как его правильно доставить другому приложению...
Записан
Qt 5.11/4.8.7 (X11/Win)
ddrtn
Гость
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #7 :
Ноябрь 16, 2010, 13:18 »
Досадно. Про Х11 я не знаю наверняка. Под виндовз можно. Очень надеялся, что если есть Глобал шорткат, то может быть и глобал mouse event.
Записан
ddrtn
Гость
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #8 :
Ноябрь 16, 2010, 13:21 »
Ага. его нужно не просто поймать, но и отпустить дальше.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #9 :
Ноябрь 16, 2010, 13:26 »
Теоретически без граб-а такое можно сделать через InputOnly окна.
Но Qt их не поддерживает. Да и писанины много будет и не факт, что будет работать всегда.
Записан
Qt 5.11/4.8.7 (X11/Win)
ddrtn
Гость
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #10 :
Ноябрь 16, 2010, 13:34 »
Я, честно говоря, не подозреваю вообще, как на иксах такое сделать. под линем гуи только на qt и fox писал. Хотя, может быть, просто слушать устройства клавы и мыши и реагировать на их активность. отследить присутствие человека рядом хватит
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #11 :
Ноябрь 16, 2010, 14:05 »
Цитировать
Хотя, может быть, просто слушать устройства клавы и мыши и реагировать на их активность.
Xlib API не позволяет этого. Может XInputExtension позволяет.
Записан
Qt 5.11/4.8.7 (X11/Win)
gogi
Гость
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #12 :
Ноябрь 16, 2010, 14:15 »
Цитата: ddrtn от Ноябрь 16, 2010, 12:41
Доброго времени суток!
Есть задача: по нажатию левой кнопки мыши или любой клавиши клавиатуры выполняющаяся программа должна (плейер) становиться на паузу или выключаться.
Это можно реализовать используя, например, системный хук (в виндовз). Наверняка что-то такое есть и в X.
Однако же хотелось бы заюзать кроссплатформенную либу. Смотрел QXT - хорошо отлавливает глобальный шорткат, но не совсем то.
Подскажите, плз, может кто знает подобную либу, желательно, совместимую с Qt (предосталяющую Qt интерфейс).
Под виндовз сам знаешь как. Под линуксом можно на уровне иксов, а можно на более низком уровне: читать события напрямую от файлов устройств /dev/input/*(event, mouse, mice, ...).
>Подскажите, плз, может кто знает подобную либу, желательно, совместимую с Qt (предосталяющую Qt интерфейс).
Вот и займись.
Записан
mityane
Гость
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #13 :
Октябрь 07, 2011, 13:43 »
Цитата: ddrtn от Ноябрь 16, 2010, 13:21
Ага. его нужно не просто поймать, но и отпустить дальше.
Интересно, а как Вы реализовали функцию "и отпустить дальше"?
Записан
ddrtn
Гость
Re: Как отловить глобальное нажатие кнопки мыши?
«
Ответ #14 :
Октябрь 07, 2011, 14:07 »
Честно говоря, уже и не помню вообще. Под виндой точно работало. под линем - не помню. вот сорцы кусочка.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...