【问题标题】:make the cursor on the screen invisible after it has stopped停止后使屏幕上的光标不可见
【发布时间】:2014-04-19 02:14:05
【问题描述】:

首先,对不起我的英语不好!

我想让屏幕上的光标在停止移动 10 秒后变得不可见。我认为如果存在类似 positionChanged(QPoint lastPos , QPoint currentPos) 的信号,这个问题很容易解决,lastPos 表示主屏幕光标(热点)在全局屏幕坐标中的最后位置,currentPos 表示当前位置,一旦光标停止移动,就应该发出这个信号。注意,即使没有按下鼠标按钮,这里的鼠标移动事件也应该发生,即有光标跟踪鼠标。在 Qt 中,可以使用 QWidget:: 启用鼠标跟踪: setMouseTracking(),但是我的问题不限于 Qt,它是系统范围的,我现在想在 Windows 上执行此操作,有人知道如何在这里启用鼠标跟踪吗? 也欢迎任何其他解决方案!

【问题讨论】:

    标签: qt pyqt pyside pywin32


    【解决方案1】:

    您可以使用事件过滤器来查看鼠标是否移动:

    bool MainWindow::eventFilter(QObject *obj, QEvent *event)
    {
      if (event->type() == QEvent::MouseMove)
      {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
        qDebug() << (QString("Moved! (%1,%2)").arg(mouseEvent->pos().x()).arg(mouseEvent->pos().y()));
      }
      return false;
    }
    

    并将其安装在您的 MainWindow 左右:

    qApp->installEventFilter(this);
    

    然后,制作一个 10 秒的计时器,当鼠标移动时它会被重置(并使光标再次可见)。要使鼠标光标消失,您可以在计时器用完时调用它:

    QApplication::setOverrideCursor(Qt::BlankCursor);
    

    要使光标再次可见,请调用:

    QApplication::restoreOverrideCursor()
    

    【讨论】:

    • 谢谢,但我的问题不限于 Qt,它是系统范围的,所以我不能在 MainWindow 中安装EventFilter。更具体地说,我想检测屏幕上光标的运动而不是 QWidget .
    • Qt 无法拦截系统范围的事件。不过这可能会有所帮助:davor.no-ip.com/blog/2010/11/24/system-wide-events-and-qt
    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多