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

时间:2015-05-14 00:31:39

标签: c++ qt

我在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();  
}

这是我第一次将Qt与C ++集成。大部分应用都使用了pyotherside。

任何指向我出错的地方都会受到赞赏。

谢谢,

史蒂夫

1 个答案:

答案 0 :(得分:0)

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

var sanitized = "12345some textqwert";
if (sanitized.match(/^\d{5}.*[a-zA-Z]{5}$/))
  alert("Valid");
else
  alert("Invalid");

sanitized = "1234some textqwert";
if (sanitized.match(/^\d{5}.*[a-zA-Z]{5}$/))
  alert("Valid");
else
  alert("Invalid");