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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: не получается отправить событие  (Прочитано 4320 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Март 15, 2011, 13:17 »

QDeclarativeView установлен как центральный виджет. Пытаюсь послать ему клик мышкой:
Код
C++ (Qt)
QMouseEvent *ev = new QMouseEvent (QEvent::MouseButtonPress,
  declarativeView->mapFromGlobal (QCursor::pos ()),
  Qt::LeftButton,
  Qt::LeftButton,
  Qt::NoModifier);
QCoreApplication::postEvent (declarativeView, ev);
 
Но событие не приходит. Если вручную кликать мышкой, то все пучком. В чем может быть трабла?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 15, 2011, 14:52 »

Убил пол дня. Вот решение.
Код
C++ (Qt)
QMouseEvent *ev = new QMouseEvent (QEvent::MouseButtonPress,
  declarativeView->mapFromGlobal (QCursor::pos ()),
  Qt::LeftButton,
  Qt::LeftButton,
  Qt::NoModifier);
QApplication::sendEvent (declarativeView->childAt (QCursor::pos ()), ev);
ev = new QMouseEvent (QEvent::MouseButtonRelease,
  declarativeView->mapFromGlobal (QCursor::pos ()),
  Qt::LeftButton,
  Qt::LeftButton,
  Qt::NoModifier);
QApplication::sendEvent (declarativeView->childAt (QCursor::pos ()), ev);
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
walk
Гость
« Ответ #2 : Август 10, 2012, 18:52 »

Думаю, нелишне будет добавить.

Тут такая тонкость. Для postEvent ev надо создавать в куче: владение объектом перехватывается. Для sendEvent, наоборот, рекомендуется создавать ev на стеке, иначе придётся удалять вручную.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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