Russian Qt Forum

Qt => Общие вопросы => Тема начата: Resager от Сентябрь 11, 2012, 10:26



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


Название: Re: Mouse click средствами Qt
Отправлено: Serr500 от Сентябрь 11, 2012, 11:17
Ну, ежели известен дескриптор окна, то в винде можно нагло кинуть ему сообщение через PostMessage. Сначала WM_LBUTTONDOWN, а затем - WM_LBUTTONUP.


Название: Re: Mouse click средствами Qt
Отправлено: GreatSnake от Сентябрь 11, 2012, 11:31
Аналогично и на X11.


Название: Re: Mouse click средствами Qt
Отправлено: Resager от Сентябрь 11, 2012, 12:02
Аналогично и на X11.

А можно пример кода?
В справке нахожу только "QApplication::sendEvent"
А с помощью неё я могу сделать только
Код:
QApplication::sendEvent(ui->textEdit, &movemouse);
И получатель и отправляемое сообщение есть объекты Qt


Название: Re: Mouse click средствами Qt
Отправлено: Bepec от Сентябрь 11, 2012, 13:07
Ищите не в справке Qt. То, что вы хотите, надо искать в справке операционных систем, на которых желаете это сделать.
MSDN - в винде.
man - в никсах(не уверен, но по идее курить маны полезно :) ).


Название: Re: Mouse click средствами Qt
Отправлено: Resager от Сентябрь 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);

А никсовые... даже не знаю где этот ман найти. Может у каждой оболочки свои сигналы. У гнома одни, у кедов свои...


Название: Re: Mouse click средствами Qt
Отправлено: lighting от Сентябрь 11, 2012, 13:56
man - в никсах(не уверен, но по идее курить маны полезно :) ).
Чего ман-то? man это просто вызов справки так что без конкретизации вы человека в никуда посылаете.


Название: Re: Mouse click средствами Qt
Отправлено: Bepec от Сентябрь 11, 2012, 14:04
Я туда и посылаю ) Это же никсы. Если ты незнаешь чего ищешь - хрен найдёшь :D

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

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


 


Название: Re: Mouse click средствами Qt
Отправлено: Resager от Сентябрь 11, 2012, 14:32
PPS средствами Qt- никак.

Ну я про это в первом посте упомянул, спросив как использовать АПИ и, если кто знает, какие АПИ функции. В этом вся сложность.


Название: Re: Mouse click средствами Qt
Отправлено: Igors от Сентябрь 11, 2012, 14:44
По поводу др платформ - на старых Mac (еще до OSX) такая возможность была, причем разрешались только низкоуровневые события, напр mouseDown. Однако это извращение ничего хорошего не приносило. Приложение рассматривало полученное событие как активацию (т.е. ОС ставил его во фронт). Попытка 2 mouseDown подряд опознавалась как double-click и.т.п. В общем, получить какой-то разумный результат мудрено  :)


Название: Re: Mouse click средствами Qt
Отправлено: kambala от Сентябрь 11, 2012, 18:06
Виндозные я знаю давно, не знаю как их реализовать на Qt
bool QCoreApplication::winEventFilter ( MSG * msg, long * result ) [virtual]


Название: Re: Mouse click средствами Qt
Отправлено: Bepec от Сентябрь 11, 2012, 18:08
Камбала, это слот для получаемых событий :) Но отнюдь не для посыла.


Название: Re: Mouse click средствами Qt
Отправлено: GreatSnake от Сентябрь 11, 2012, 18:14
А можно пример кода?
Google в помощь (https://www.google.ru/#q=xsendevent+buttonpress&hl=ru&newwindow=1&prmd=imvnsfd&lr=lang_ru&sa=X&ei=9VRPUIW8BInf4QSnnYHIDg&ved=0CBsQuAE&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&fp=f78dc54911e5178b&biw=1280&bih=855))


Название: Re: Mouse click средствами Qt
Отправлено: kambala от Сентябрь 11, 2012, 19:30
Камбала, это слот для получаемых событий :) Но отнюдь не для посыла.
а, так а посылать разве нельзя откуда хочешь?


Название: Re: Mouse click средствами Qt
Отправлено: Bepec от Сентябрь 11, 2012, 20:34
Тогда зачем ссылка на перехват сообщений? :D


Название: Re: Mouse click средствами Qt
Отправлено: kambala от Сентябрь 11, 2012, 20:56
перепутал одно с другим


Название: Re: Mouse click средствами Qt
Отправлено: V1KT0P от Сентябрь 11, 2012, 20:57
У меня такой вопрос, можно ли и как следующее:
1) Кликнуть мышью в любую область ОС (ну или конкретному окну, не принадлежащему данному приложению на Qt
2) Послать Event в другое приложение на Qt
1-й пункт интересует в венде и линухе одновременно (если API, то где копать и как использовать).
(Если на венде ещё можно какие-то костыли использовать (AHK скриптинг), то в лине даже не знаю (и не слышал о таком).
Заранее благодарю.
Ну вот для видны третья ссылка в гугле: http://forum.codenet.ru/q28695/ (http://forum.codenet.ru/q28695/)
Для линукса вот бегло нашел нечто: http://www.opennet.ru/man.shtml?topic=XWarpPointer&category=3&russian=3 (http://www.opennet.ru/man.shtml?topic=XWarpPointer&category=3&russian=3)