在Qt中生成(模拟)虚假鼠标事件

use*_*999 7 c++ qt qt4

我有一个Qt应用程序(服务器),它从另一个Qt应用程序通过本地网络接收鼠标位置和状态(鼠标按下,释放或鼠标移动).我正确地读取鼠标状态和位置,但我无法在服务器应用程序中生成假消息来模拟鼠标移动,鼠标按下事件.

服务器具有QGraphicsView中的所有逻辑来处理鼠标移动等,当它从服务器机器上的鼠标输入时,一切都按预期工作.

但是一旦我尝试通过读取从其他应用程序发送的鼠标位置和状态来生成虚假的鼠标事件,它就不起作用.

令人惊讶的是,如果我创建假事件并将其传递到场景,如下所示,它会生成mouseMoveEvents但我想为QGraphicsView执行此操作,因为它具有在服务器应用程序中处理鼠标的逻辑.

这有效:

QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
pressEvent.setScenePos(QPointF(100, 100));
pressEvent.setButton(Qt::LeftButton);
pressEvent.setButtons(Qt::LeftButton);
QApplication::sendEvent(pGraphicsScene, &pressEvent);
Run Code Online (Sandbox Code Playgroud)

这不起作用:

    QMouseEvent eve( (QEvent::MouseMove), QPoint(100,100), 
        Qt::NoButton,
        Qt::NoButton,
        Qt::NoModifier   );

qApp->sendEvent(this , &eve);
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我理解为什么我不能为GraphicsView生成假事件,以及如何做到这一点.

谢谢

小智 7

您必须将事件发送到视口QWidget,如下所示:

qApp->sendEvent(viewport(), &eve);
Run Code Online (Sandbox Code Playgroud)

  • 发送指向本地变量的指针是否可以? (2认同)