在Qt中捕獲應用程序範圍事件時遇到了一些困難。在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處理。當它成功時可以捕獲丟棄事件(我可以將case QEvent::Drop
分支添加到我的處理程序中),但是如何使用Esc捕獲被忽略的丟棄或取消丟棄?似乎不可能直接完成,也許我可以捕獲拖動事件循環終止事件或類似的東西?或者甚至可能有人知道一個直接的方法來做到這一點?
編輯: 再次打開,我需要捕捉應用程序範圍的事件的關注,而不是小部件一個
有DragEnter事件,該事件意味着用戶開始拖動並輸入小部件。也許它有幫助。 – Chernobyl 2014-10-18 20:00:15
@切爾諾貝利,謝謝,我知道拖延事件的存在,但他們不會幫助。我需要拖動終止事件,既不進入也不離開。 – dvvrd 2014-10-18 20:03:47