我在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取消丢弃?似乎不可能直接完成,也许我可以捕获拖动事件循环终止事件或类似的东西?或者甚至有人知道直接的方法吗?
编辑: 再次转移我需要捕获应用程序范围事件的注意力,而不是小部件
答案 0 :(得分: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);
}