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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Генерирование события нажатия левой кнопки мыши.  (Прочитано 11103 раз)
Алёна_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.048 секунд. Запросов: 20.