【问题标题】:selectively ignoring mouse events in Qt选择性地忽略 Qt 中的鼠标事件
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 2023-02-14
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2014-08-27
    • 2010-12-16
    相关资源
    最近更新 更多