PDA

View Full Version : send QEvent::NonClientAreaMouse* events



R-Type
31st October 2012, 11:22
Hi,
I've installed event filter (qApp->installEventFilter) to catch and record mouse and keyboard user interactions. It seems to work fine. But when I try to replay events (they are read from file), all NonClientAreaMouse events are ignored. So I cannot replay windoes movement or windows close actions. There is also problem with keyboard events, but it will be the second question (may be I need to add focus events in recorder). Player send events this way:


case QEvent::NonClientAreaMouseButtonDblClick:
case QEvent::NonClientAreaMouseButtonPress:
case QEvent::NonClientAreaMouseButtonRelease:
case QEvent::NonClientAreaMouseMove:
case QEvent::MouseButtonDblClick:
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
case QEvent::MouseMove:
{
int x=fields[1].toInt();
int y=fields[2].toInt();
lastPos.setX(x);
lastPos.setY(y);
if (type==QEvent::MouseMove || type==QEvent::NonClientAreaMouseMove)
{
QCursor::setPos(lastPos);
}
receiver=QApplication::widgetAt(lastPos);
if (receiver)
{
Qt::MouseButton button=static_cast<Qt::MouseButton>(fields[3].toInt());
Qt::MouseButtons buttons=static_cast<Qt::MouseButtons>(fields[4].toInt());
Qt::KeyboardModifiers modifiers=fields[5].toInt();
evt=new QMouseEvent(type, receiver->mapFromGlobal(lastPos), button, buttons, modifiers);
}
break;
}
...
if (evt && receiver)
{
QCoreApplication::postEvent(receiver, evt);
}

QEvent::Mouse work, but QEvent::NonClientAreaMouse didn't.

P.S. Please don't suggest to use SetWindowsHookEx. There are many implementations, but I need it crossplatform.