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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Mouse click средствами Qt  (Прочитано 10223 раз)
Resager
Гость
« : Сентябрь 11, 2012, 10:26 »

У меня такой вопрос, можно ли и как следующее:
1) Кликнуть мышью в любую область ОС (ну или конкретному окну, не принадлежащему данному приложению на Qt
2) Послать Event в другое приложение на Qt
1-й пункт интересует в венде и линухе одновременно (если API, то где копать и как использовать).
(Если на венде ещё можно какие-то костыли использовать (AHK скриптинг), то в лине даже не знаю (и не слышал о таком).
Заранее благодарю.
Записан
Serr500
Гость
« Ответ #1 : Сентябрь 11, 2012, 11:17 »

Ну, ежели известен дескриптор окна, то в винде можно нагло кинуть ему сообщение через PostMessage. Сначала WM_LBUTTONDOWN, а затем - WM_LBUTTONUP.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Сентябрь 11, 2012, 11:31 »

Аналогично и на X11.
Записан

Qt 5.11/4.8.7 (X11/Win)
Resager
Гость
« Ответ #3 : Сентябрь 11, 2012, 12:02 »

Аналогично и на X11.

А можно пример кода?
В справке нахожу только "QApplication::sendEvent"
А с помощью неё я могу сделать только
Код:
QApplication::sendEvent(ui->textEdit, &movemouse);
И получатель и отправляемое сообщение есть объекты Qt
« Последнее редактирование: Сентябрь 11, 2012, 12:49 от Resager » Записан
Bepec
Гость
« Ответ #4 : Сентябрь 11, 2012, 13:07 »

Ищите не в справке Qt. То, что вы хотите, надо искать в справке операционных систем, на которых желаете это сделать.
MSDN - в винде.
man - в никсах(не уверен, но по идее курить маны полезно Улыбающийся ).
Записан
Resager
Гость
« Ответ #5 : Сентябрь 11, 2012, 13:12 »

Ищите не в справке Qt. То, что вы хотите, надо искать в справке операционных систем, на которых желаете это сделать.
MSDN - в винде.
man - в никсах(не уверен, но по идее курить маны полезно Улыбающийся ).

Виндозные я знаю давно, не знаю как их реализовать на Qt
Нагуглил один пример, но не работает (нет клика)
Код:
QDesktopWidget * desktopWidget = QApplication::desktop();
QMouseEvent event(QEvent::MouseButtonPress,QPoint(41,81),Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);
QApplication::sendEvent(desktopWidget, &event);

А никсовые... даже не знаю где этот ман найти. Может у каждой оболочки свои сигналы. У гнома одни, у кедов свои...
« Последнее редактирование: Сентябрь 11, 2012, 13:24 от Resager » Записан
lighting
Гость
« Ответ #6 : Сентябрь 11, 2012, 13:56 »

man - в никсах(не уверен, но по идее курить маны полезно Улыбающийся ).
Чего ман-то? man это просто вызов справки так что без конкретизации вы человека в никуда посылаете.
Записан
Bepec
Гость
« Ответ #7 : Сентябрь 11, 2012, 14:04 »

Я туда и посылаю ) Это же никсы. Если ты незнаешь чего ищешь - хрен найдёшь Веселый

PS потому у меня там приписка и стоит, если ты незаметил Показает язык

PPS средствами Qt- никак.


 
Записан
Resager
Гость
« Ответ #8 : Сентябрь 11, 2012, 14:32 »

PPS средствами Qt- никак.

Ну я про это в первом посте упомянул, спросив как использовать АПИ и, если кто знает, какие АПИ функции. В этом вся сложность.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Сентябрь 11, 2012, 14:44 »

По поводу др платформ - на старых Mac (еще до OSX) такая возможность была, причем разрешались только низкоуровневые события, напр mouseDown. Однако это извращение ничего хорошего не приносило. Приложение рассматривало полученное событие как активацию (т.е. ОС ставил его во фронт). Попытка 2 mouseDown подряд опознавалась как double-click и.т.п. В общем, получить какой-то разумный результат мудрено  Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #10 : Сентябрь 11, 2012, 18:06 »

Виндозные я знаю давно, не знаю как их реализовать на Qt
bool QCoreApplication::winEventFilter ( MSG * msg, long * result ) [virtual]
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #11 : Сентябрь 11, 2012, 18:08 »

Камбала, это слот для получаемых событий Улыбающийся Но отнюдь не для посыла.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Сентябрь 11, 2012, 18:14 »

А можно пример кода?
Google в помощь)
Записан

Qt 5.11/4.8.7 (X11/Win)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Сентябрь 11, 2012, 19:30 »

Камбала, это слот для получаемых событий Улыбающийся Но отнюдь не для посыла.
а, так а посылать разве нельзя откуда хочешь?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #14 : Сентябрь 11, 2012, 20:34 »

Тогда зачем ссылка на перехват сообщений? Веселый
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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