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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Генерирование события нажатия левой кнопки мыши.  (Прочитано 10729 раз)
Алёна_4_12_1989
Гость
« : Ноябрь 08, 2012, 16:57 »

Здравствуйте. Подскажите, пожлаулуйста, как сгенерировать QMouseEvent для нажатия левой кнопки мыши. Я делаю следующим образом:

QMouseEvent mouse_event = QMouseEvent(QEvent::MouseButtonPress, QCursor::pos(), Qt::LeftButton , Qt::NoButton, Qt::NoModifier);
QApplication::postEvent(this, &mouse_event);

Но происходит CRASH.

Эти действия я провожу в функции класса, наследуемого от QWidget. Мой класс имеет макрос Q_OBJECT.

В чем может быть дело? Спасибо.
Записан
mutineer
Гость
« Ответ #1 : Ноябрь 08, 2012, 17:10 »

в том, что mouse_event уничтожается при выходе из этой функции, а postEvent нужно чтобы объект продолжал жить
Цитировать
The event must be allocated on the heap since the post event queue will take ownership of the event and delete it once it has been posted
« Последнее редактирование: Ноябрь 08, 2012, 17:20 от mutineer » Записан
Алёна_4_12_1989
Гость
« Ответ #2 : Ноябрь 08, 2012, 17:23 »

Спасибо. Это помогло. Приложение не падает. Но желаемое действие не происходит после входа в mousePressEvent(). Т.е. скорее всего неправильно передаются параметры в конструктор QMouseEvent(). Может Вы знаете, как создавать ивент правильно?
Записан
mutineer
Гость
« Ответ #3 : Ноябрь 08, 2012, 17:28 »

Попробуй после этого ивента послать еще QEvent::MouseButtonRelease
Записан
Алёна_4_12_1989
Гость
« Ответ #4 : Ноябрь 08, 2012, 17:29 »

Сейчас попробую. Спс.
Записан
mutineer
Гость
« Ответ #5 : Ноябрь 08, 2012, 17:32 »

Ну и не забывай, что QCursor::pos() это глобальные координаты, а в ивент надо передавать координаты относительно целевого виджета
Записан
Алёна_4_12_1989
Гость
« Ответ #6 : Ноябрь 08, 2012, 17:38 »

Да, это действительно помогло. Действие выполнялось по клику, т.е. после отпускания кнопки. Большое спасибо. Осталось разобраться, почему приложение падает при повторном клике. Думаю, разберусь.
У Вас большой опыт работы с Qt ?
Записан
mutineer
Гость
« Ответ #7 : Ноябрь 08, 2012, 17:40 »

Года полтора, наверно)))
Записан
Алёна_4_12_1989
Гость
« Ответ #8 : Ноябрь 08, 2012, 17:41 »

НАвероное, весь хелп перечитали)
Записан
mutineer
Гость
« Ответ #9 : Ноябрь 08, 2012, 17:42 »

Нет конечно, не все технологии нужны на текущем проекте
Записан
Алёна_4_12_1989
Гость
« Ответ #10 : Ноябрь 08, 2012, 17:44 »

Ясно. БОльшое спасибо за помощь Подмигивающий
Записан
Алёна_4_12_1989
Гость
« Ответ #11 : Ноябрь 08, 2012, 18:08 »

Упс. Если Вы еще не ушли.
Я создаю объект QMouseEvent, но когда я его удаляю, приложение падает(
Printf после функции delete не печатается.
Записан
mutineer
Гость
« Ответ #12 : Ноябрь 08, 2012, 18:12 »

код покажи
Записан
twp
Гость
« Ответ #13 : Ноябрь 08, 2012, 19:00 »

его не надо удалять, он удаляется в цикле обработки сообщений. Поэтому происходит краш - удаление уже удаленного объекта
Записан
Алёна_4_12_1989
Гость
« Ответ #14 : Ноябрь 09, 2012, 09:09 »

Спасибо. Я уже додумалась до этого)))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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