Qt5 C ++自动鼠标点击

时间:2014-02-10 15:02:10

标签: c++ qt mouseevent qt5

我正在尝试创建一个应用程序,鼠标移动到屏幕上的某些位置并自动单击左键。 问题是我无法在Qt应用程序之外点击,因此我通过使应用程序对鼠标点击透明并使用此代码全屏显示来解决方法:

int x = 800;
int y = 500;

this->setWindowFlags(Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint|Qt::ToolTip);
this->setAttribute(Qt::WA_TranslucentBackground);
this->setAttribute( Qt::WA_TransparentForMouseEvents);

QCursor::setPos(x,y);
qDebug()<<QCursor::pos();
QWidget *d = QApplication::desktop()->screen();
QMouseEvent MouseEvent(QEvent::MouseButtonPress, QCursor::pos(),Qt::LeftButton,Qt::LeftButton, Qt::NoModifier);
QApplication::sendEvent(d, &MouseEvent);
QApplication::sendEvent(d, &MouseEvent);

鼠标光标移动到所需位置,但点击不起作用。 我还尝试更换Qt类来处理鼠标事件并使用Windows API,因为我不需要跨平台应用程序,但我遇到了困难。

1 个答案:

答案 0 :(得分:2)

我知道这有点晚了,但有办法做你想做的事。通常,创建或模拟用户界面事件仅用于自动化测试。

如果您想要某些计算或算法的结果,除了自动化其UI之外,几乎总能更好地从一个软件获得所需的结果。您可以看到它是否具有文档化的API,您可以调用它调用的相同Web服务,您可以链接它所使用的相同库,也可以复制它使用的算法。

如果这些都不可接受,那么您应该查看QT5 tutorials on automated testing

特别是QTest Namespace。单击鼠标的函数有两个重载,称为QTEST::mouseClick

我认为这可能会做你想要的:

#include <QTest>

// class and function declarations removed here

QTest::mouseClick(d, Qt::LeftButton, Qt::NoModifier, QPoint(x,y));