Russian Qt Forum

Qt => Общие вопросы => Тема начата: Hind от Май 03, 2009, 20:39



Название: Как эмулировать нажатие мышкой?
Отправлено: Hind от Май 03, 2009, 20:39
Нажать нужно на свое же окно, точнее, на определенный виджет.

Проблема в том, что sendEvent и notify не дают никакого эффекта, а в случае postEvent программа крашится.
Я догадываюсь, что неправильно применяю, но в этих ваших интернетах что-то не нашел внятного примера.
В поиске по форуму нашел аналогичный вопрос без ответа и про sendEvent, который не помог.

Буду благодарен за подсказку или пример, как правильно...


Название: Re: Как эмулировать нажатие мышкой?
Отправлено: igor_bogomolov от Май 03, 2009, 23:08
Как программно сэмулировать события от "мышки" (http://prog.org.ru/wiki/index.php?title=Frequently_Asked_Questions#.D0.9A.D0.B0.D0.BA_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.BD.D0.BE_.D1.81.D1.8D.D0.BC.D1.83.D0.BB.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D1.82.D1.8C_.D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D1.8F_.D0.BE.D1.82_.22.D0.BC.D1.8B.D1.88.D0.BA.D0.B8.22.3F)


Название: Re: Как эмулировать нажатие мышкой?
Отправлено: Hind от Май 04, 2009, 00:37
Код
C++ (Qt)
{
Position.setX(basex + Position.x() * 53 - 26);       // Расчет положения, не суть важно
Position.setY(basey + Position.y() * 53 - 26);
 
QMouseEvent Event (QEvent::MouseButtonPress, Position, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QMouseEvent Event2(QEvent::MouseButtonRelease, Position, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::postEvent(game, &Event);
QCoreApplication::postEvent(game, &Event2);
}

Такой вот код приводит к падению. Иногда в Application Out появляется строчка вроде: "Event of type 3 deleted while posted to QWebView webView".
Правильно ли я понимаю, что Event должен быть жив, пока не будет обработан?

Если заменить postEvent на sendEvent, ничего не падаает, но и эффекта нет.


Название: Re: Как эмулировать нажатие мышкой?
Отправлено: igor_bogomolov от Май 04, 2009, 01:13
События нужно создовать через оператор new
Код
C++ (Qt)
QMouseEvent *event = new QMouseEvent(QEvent::MouseButtonPress, Position, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);


Название: Re: Как эмулировать нажатие мышкой?
Отправлено: Hind от Май 04, 2009, 02:43
Спасибо, я понял, в чем ошибка. ) Попробовал и убедился что да, так работает.

Но только не тогда, когда кликаю по флеш-объекту в QWebView. :(
А для этого вся программа и пишется.
Думаю, придется подключать WinAPI к делу... Для простого клика мышкой ;D

Сделал на WinAPI. Кто придет по поиску - курить в сторону SendInput.


Название: Re: Как эмулировать нажатие мышкой?
Отправлено: ритт от Май 05, 2009, 00:30
[офф]разве за баннероклики ещё кто-то платит ?)[/офф]