首页 文章

在Qt中捕获拖动取消事件

提问于
浏览
2

我在Qt中捕获应用程序范围事件时遇到了一些困难 .

我的目的是捕获某些GUI应用程序中的每个用户操作 . 当然,我已经覆盖了 QApplication::notify 处理程序并在那里处理不同类型的应用程序范围事件 . 像这样的东西:

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);
}

在用户开始拖放操作之前,这非常有效 . 鼠标按键事件处理得很好,它在我的处理程序中捕获,生活在那里很美 . 当我尝试在Windows上捕获鼠标释放事件时,问题就出现了 .

进入拖动操作时,QApplication :: notify不再处理鼠标和键盘事件 . 有可能在成功时捕获drop事件(我可以将 case QEvent::Drop branch添加到我的处理程序中),但是如何使用Esc捕获忽略的drop或者取消drop?似乎不可能直接完成,也许我可以捕获拖动事件循环终止事件或类似的东西?或者甚至可能有人知道直接的方法吗?

编辑:再次转移我需要捕获应用程序范围事件的注意力,而不是小部件

1 回答

  • 0

    请试试这个

    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);
        }
    

相关问题