【发布时间】:2013-11-13 07:46:07
【问题描述】:
我正在编写一个从 3 个鼠标获取输入的应用程序。其中 2 个鼠标用于手势,它们的输入单独处理,第 3 个应该正常工作。 我已经成功安装了一个事件过滤器(见下文),它运行我自己的鼠标处理代码(processMouse())。
但是,当试图让过滤器忽略来自某些鼠标的事件(由 processMouse() 的布尔返回值确定)时,什么都不会被忽略。
我尝试过使用正常的真/假返回值,将事件重置为“无”事件,调用它的忽略函数,但即使我告诉它忽略事件,鼠标仍会继续移动。
bool MainWindow::eventFilter(QObject *obj, QEvent *event){
if ((event->type() == QEvent::MouseMove) ||
(event->type() == QEvent::MouseButtonPress)){
if (configured){
if (!processMouse()){
//event->ignore();
//event = new QEvent(QEvent::None);
}
}
return true;
}
return false;
}
我如何选择性地忽略来自事件过滤器的 MouseMove 事件?
【问题讨论】:
-
鼠标移动不是由 Qt 处理的,而是由您的窗口管理器处理的。 mouseMove 事件只是从窗口管理器到 Qt 的一个信号,你不能在你的应用程序中取消它(在不了解你的窗口管理器和环境的情况下)
-
为事件分配一些东西根本不会改变原始事件(也不会改变它的处理)。它只是更改了本地指针变量的值,现在指向新创建的事件(将丢失)而不是实际处理的事件。该分配对您的方法来说是本地的,不会在其他任何地方引起注意。
-
感谢您的澄清,我现在正试图通过使用我的 processMouse 函数的返回值来确定是否应该设置光标的位置来解决这个问题。它可能不如绘制和实现一个新的漂亮,但它应该可以满足我的目的。
标签: c++ qt events mouse filtering