gpt4 book ai didi

c++ - 在 Qt 中捕获拖动取消事件

转载 作者:可可西里 更新时间:2023-11-01 10:45:49 25 4
gpt4 key购买 nike

我在 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 取消掉落?直接完成似乎是不可能的,也许我可以捕获拖动事件循环终止事件或类似的东西?或者甚至有人知道一种直接的方法?

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

最佳答案

请试试这个

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

关于c++ - 在 Qt 中捕获拖动取消事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26443890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com