Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: Алёна_4_12_1989 от Ноябрь 08, 2012, 16:57



Название: Генерирование события нажатия левой кнопки мыши.
Отправлено: Алёна_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.

В чем может быть дело? Спасибо.


Название: Re: Генерирование события нажатия левой кно&#
Отправлено: mutineer от Ноябрь 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


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: Алёна_4_12_1989 от Ноябрь 08, 2012, 17:23
Спасибо. Это помогло. Приложение не падает. Но желаемое действие не происходит после входа в mousePressEvent(). Т.е. скорее всего неправильно передаются параметры в конструктор QMouseEvent(). Может Вы знаете, как создавать ивент правильно?


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: mutineer от Ноябрь 08, 2012, 17:28
Попробуй после этого ивента послать еще QEvent::MouseButtonRelease


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: Алёна_4_12_1989 от Ноябрь 08, 2012, 17:29
Сейчас попробую. Спс.


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: mutineer от Ноябрь 08, 2012, 17:32
Ну и не забывай, что QCursor::pos() это глобальные координаты, а в ивент надо передавать координаты относительно целевого виджета


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: Алёна_4_12_1989 от Ноябрь 08, 2012, 17:38
Да, это действительно помогло. Действие выполнялось по клику, т.е. после отпускания кнопки. Большое спасибо. Осталось разобраться, почему приложение падает при повторном клике. Думаю, разберусь.
У Вас большой опыт работы с Qt ?


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: mutineer от Ноябрь 08, 2012, 17:40
Года полтора, наверно)))


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: Алёна_4_12_1989 от Ноябрь 08, 2012, 17:41
НАвероное, весь хелп перечитали)


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: mutineer от Ноябрь 08, 2012, 17:42
Нет конечно, не все технологии нужны на текущем проекте


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: Алёна_4_12_1989 от Ноябрь 08, 2012, 17:44
Ясно. БОльшое спасибо за помощь ;)


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: Алёна_4_12_1989 от Ноябрь 08, 2012, 18:08
Упс. Если Вы еще не ушли.
Я создаю объект QMouseEvent, но когда я его удаляю, приложение падает(
Printf после функции delete не печатается.


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: mutineer от Ноябрь 08, 2012, 18:12
код покажи


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: twp от Ноябрь 08, 2012, 19:00
его не надо удалять, он удаляется в цикле обработки сообщений. Поэтому происходит краш - удаление уже удаленного объекта


Название: Re: Генерирование события нажатия левой кнопки мыши.
Отправлено: Алёна_4_12_1989 от Ноябрь 09, 2012, 09:09
Спасибо. Я уже додумалась до этого)))