Catching drag cancel event in Qt

落花浮王杯 提交于 2020-01-15 08:28:07

问题


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


回答1:


Please, try this

bool QtCoreApplication::notify(QObject *obj, QEvent *e)
    {
        switch (e->type()) {
        case QEvent::QDropEvent:
            QDropEvent* dropEvent = (QDropEvent*)e;
            dropEvent->keyboardModifiers(); // keys pressed
            dropEvent->dropAction(); // Drop result
        break;

        return QApplication::notify(obj, e);
    }


来源:https://stackoverflow.com/questions/26443890/catching-drag-cancel-event-in-qt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!