I'm experiencing some difficulties with catching application-scope events in Qt.
My purpose is to catch every user action in some GUI application. Of course I've overrided QApplication::notify
handler and processing different types of application-scope events there. Something like that:
bool CoolApplication::notify(QObject *obj, QEvent *e)
{
switch (e->type()) {
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
// Handle mouse
break;
case QEvent::Wheel:
// Handle wheel
break;
case QEvent::KeyPress:
case QEvent::KeyRelease:
// Handle keyboard and so on
break;
default:
break;
}
return QApplication::notify(obj, e);
}
That works pretty well until user starts drag-and-drop operation. Mouse press event is handled well, it is catched in my handler, life is beautiful there. The problems start when I try to catch mouse release event on Windows.
When entering drag operation mouse and keyboard events are no longer handled by QApplication::notify. It is possible to catch drop event when it was successfull (I can add case QEvent::Drop
branch into my handler), but how to catch ignored drop or canceling drop with Esc? It seems impossible to be done directly, maybe I can catch drag event loop termination event or something like that? Or even maybe someone knows a direct way to do it?
Edit: Once more turning the attention that I need to catch application-scope event, not the widget one