gpt4 book ai didi

c++ - 在 Qt 中生成(模拟)假鼠标事件

转载 作者:可可西里 更新时间:2023-11-01 18:28:19 25 4
gpt4 key购买 nike

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

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

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

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

这个有效:

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

这行不通:

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

qApp->sendEvent(this , &eve);

谁能帮我理解为什么我不能为 GraphicsView 生成虚假事件以及如何做到这一点。

谢谢

最佳答案

您必须像这样将事件发送到视口(viewport) QWidget:

qApp->sendEvent(viewport(), &eve);

关于c++ - 在 Qt 中生成(模拟)假鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18849663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com