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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как эмулировать нажатие мышкой?  (Прочитано 3829 раз)
Hind
Гость
« : Май 03, 2009, 20:39 »

Нажать нужно на свое же окно, точнее, на определенный виджет.

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

Буду благодарен за подсказку или пример, как правильно...
Записан
igor_bogomolov
Гость
« Ответ #1 : Май 03, 2009, 23:08 »

Как программно сэмулировать события от "мышки"
Записан
Hind
Гость
« Ответ #2 : Май 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, ничего не падаает, но и эффекта нет.
Записан
igor_bogomolov
Гость
« Ответ #3 : Май 04, 2009, 01:13 »

События нужно создовать через оператор new
Код
C++ (Qt)
QMouseEvent *event = new QMouseEvent(QEvent::MouseButtonPress, Position, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
« Последнее редактирование: Май 04, 2009, 01:15 от igor_bogomolov » Записан
Hind
Гость
« Ответ #4 : Май 04, 2009, 02:43 »

Спасибо, я понял, в чем ошибка. ) Попробовал и убедился что да, так работает.

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

Сделал на WinAPI. Кто придет по поиску - курить в сторону SendInput.
« Последнее редактирование: Май 04, 2009, 19:00 от Hind » Записан
ритт
Гость
« Ответ #5 : Май 05, 2009, 00:30 »

[офф]разве за баннероклики ещё кто-то платит ?)[/офф]
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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