【发布时间】:2014-10-18 19:50:50
【问题描述】:
我在 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 分支添加到我的处理程序中),但是如何使用 Esc 捕获忽略的 drop 或取消 drop?似乎不可能直接完成,也许我可以捕捉到拖动事件循环终止事件或类似的东西?或者甚至可能有人知道直接的方法?
编辑: 再次将注意力转向我需要捕获应用程序范围的事件,而不是小部件
【问题讨论】:
-
有 DragEnter 事件,该事件表示用户开始拖动并进入小部件。也许有帮助。
-
@Chernobyl,谢谢,我知道拖动事件的存在,但它们无济于事。我需要拖动终止事件,既不进入也不离开。
标签: c++ windows qt drag-and-drop