2011-12-17 134 views
3

我正在写一个从3个鼠标获取输入的应用程序。 2个鼠标用于手势,它们的输入分开处理,第3个应该正常运行。 我已成功安装了运行我自己的鼠标处理代码(processMouse())的eventfilter(见下文)。有选择地忽略Qt中的鼠标事件

但是,当试图让过滤器忽略来自某些鼠标的事件(由布尔返回值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; 
} 

我怎样才能选择性忽略来自eventfilter的MouseMove事件?

+1

鼠标移动不由Qt处理,它由窗口管理器处理。 mouseMove事件只是从窗口管理器到Qt的一个信号,你不能从你的应用程序中取消它(不知道你的窗口管理器和环境有很多) – Mat 2011-12-17 15:14:10

+0

将事件分配给事件并不会改变原始事件它的处理)。它只是改变你的本地指针变量的值,现在指向新创建的事件(它将会丢失),而不是实际处理的事件。该分配对于您的方法是本地的,它不会在其他地方被注意到。 – 2011-12-17 15:25:04

+0

感谢您的澄清,我现在试图通过使用我的processMouse函数的返回值来确定光标的位置是否应该设置回来。它可能不会像绘制和实现一个新的一样漂亮,但它应该适用于我的目的。 – Energya 2011-12-18 02:03:46

回答

2

这最终通过使用名为“ManyMouse”的第三方库解决,该库分别接收每个鼠标的输入。