模拟鼠标按钮按QT 5.3仅第一次工作

Simulating a mouse button press on Qt 5.3 only works the first time

本文关键字:第一次 工作 QT 鼠标 按钮 模拟      更新时间:2023-10-16

我已经写了我在qt5/qml应用程序上写的,我希望能够从Web浏览器远程控制。我将屏幕截图发送到浏览器并接收X,y作为回报。我已经写了一个C 类来做到这一点。

当我启动应用程序时,图像出现了,浏览器的首次点击起作用。第二个行不通。如果我单击应用程序中的任何位置,我会看到按钮按在屏幕上发生,然后远程按下将再工作一次。我怀疑问题是焦点发生了变化,直到我单击实际应用程序之前,焦点才能正确重置。

我正在使用qguiapplicatiop,到目前为止,尚无法从itemat或widgetat中获得任何有用的东西,因此我可以将事件发送到适当的对象。

这是一个代码段来显示我在做什么。

void Wremote::mClick(int x, int y ) {
    QPointF *pos = new  QPointF((qreal)x,(qreal)y);
    QWindowList wl = QGuiApplication::allWindows();
    _mwindow = wl[0];
    QMouseEvent pevent(QEvent::MouseButtonPress,
        *pos, Qt::LeftButton
        ,Qt::LeftButton, 0);
    QMouseEvent revent(QEvent::MouseButtonRelease,
        *pos, Qt::LeftButton
        ,Qt::LeftButton, 0);
    QApplication::instance() ->sendEvent(_mwindow, &pevent);
    QApplication::processEvents();
    QApplication::instance() ->sendEvent(_mwindow, &revent);
    QApplication::processEvents();  
}

这是我第一次尝试与C 集成QT。该应用程序的大部分使用Pyotherside。

任何指向我出错的地方都将不胜感激。

谢谢,

Steve

如果不是优雅的解决方案,这是一个工作解决方案。

void Wremote::mClick(int x, int y ) {         
    QTest::mouseClick(_mwindow,Qt::LeftButton,0,QPoint(x,y),-1);
}