C++ 在Qt中选择性地忽略鼠标事件

C++ 在Qt中选择性地忽略鼠标事件,c++,qt,events,mouse,filtering,C++,Qt,Events,Mouse,Filtering,我正在编写一个从3只老鼠那里获取输入的应用程序。其中2只鼠标用于手势,它们的输入是分开处理的,第3只应正常工作。 我已经成功安装了一个eventfilter(见下文),它运行我自己的鼠标处理代码(processMouse()) 但是,当试图让筛选器忽略来自某些鼠标的事件(由processMouse()的布尔返回值确定)时,不会忽略任何内容 我尝试过使用正常的真/假返回值,将事件重置为“无”事件,调用它的忽略函数,但即使我告诉鼠标忽略事件,鼠标仍会继续移动 bool MainWindow::eve

我正在编写一个从3只老鼠那里获取输入的应用程序。其中2只鼠标用于手势,它们的输入是分开处理的,第3只应正常工作。 我已经成功安装了一个eventfilter(见下文),它运行我自己的鼠标处理代码(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;
}

如何有选择地忽略eventfilter中的MouseMove事件?

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

鼠标移动不是由Qt处理的,而是由您的窗口管理器处理的。mouseMove事件只是从窗口管理器到Qt的一个信号,你不能在你的应用程序中取消它(不太了解你的窗口管理器和环境),为事件分配一些东西根本不会改变原始事件(或其处理)。它只是更改本地指针变量的值,现在指向新创建的事件(将丢失),而不是实际处理的事件。该赋值是您的方法的本地赋值,在其他任何地方都不会被注意到。感谢您的澄清,我现在正尝试通过使用我的processMouse函数的返回值来确定是否应该设置光标的位置。它可能不会像绘制和实现一个新的一样漂亮,但它应该适合我的目的。