捕获Qt中的拖动取消事件
Catching drag cancel event in 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处理。当drop事件成功时,可以捕获它(我可以将case QEvent::Drop
分支添加到我的处理程序中),但如何用Esc捕获被忽略的drop或取消drop?这似乎不可能直接完成,也许我可以捕捉拖动事件循环终止事件或类似的事件?甚至可能有人知道直接的方法?
编辑:再次将注意力转向我需要捕捉应用程序范围事件,而不是小部件一
请尝试这个
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);
}
由于这对我们来说仍然是一个悬而未决的问题,我们检查了destroyed
信号的使用情况。这是在元素被丢弃的那一刻发射的,这似乎发生在QDrag被Escape键压力杀死的那一瞬间
void dragDestroyed()
{
qDebug("drag and drop cancled by Escape key");
}
QDrag *drag = new QDrag(this);
connect( drag, SIGNAL(destroyed()), this, SLOT(dragDestroyed()) );
drag->exec(Qt::MoveAction);
这可能与任何面临这个问题的人有关。
相关文章:
- 挂起和取消挂起一个文件DLL
- Android NDK传感器向事件队列报告奇怪的间隔
- 如何取消对nullptr的屏蔽,返回正确的对象
- C++取消引用指针.为什么会发生变化
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 取消引用运算符不能重载
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 如何在Qt中取消捕获字符串
- 处理闪烁窗口事件
- C++Builder中的OnClick事件签名存在问题
- 跟踪滚动条上的鼠标事件
- 什么是事件表 (wxWidgets)?
- 拦截并取消DirectX游戏的按键事件
- 捕获Qt中的拖动取消事件
- 取消分配控制台上的内存关闭事件
- Qt应用程序取消退出事件
- 如何在 qt 4.6.3 中取消触摸事件