Russian Qt Forum

Qt => Qt Quick => Тема начата: Пантер от Март 15, 2011, 13:17



Название: не получается отправить событие
Отправлено: Пантер от Март 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);
 
Но событие не приходит. Если вручную кликать мышкой, то все пучком. В чем может быть трабла?


Название: Re: не получается отправить событие
Отправлено: Пантер от Март 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);
 


Название: Re: не получается отправить событие
Отправлено: walk от Август 10, 2012, 18:52
Думаю, нелишне будет добавить.

Тут такая тонкость. Для postEvent ev надо создавать в куче: владение объектом перехватывается. Для sendEvent, наоборот, рекомендуется создавать ev на стеке, иначе придётся удалять вручную.