我正在尝试制作一个应用程序,其中鼠标转到屏幕上的某些位置并自动单击左键。问题是我无法在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,因为我真的不需要跨平台应用程序,但我在同一点上陷入困境。
这有点晚了,但是有一些方法可以做你想做的事。通常,创建或模拟用户界面事件仅用于自动测试。
如果您想要某些计算或算法的结果,那么除了自动化其UI之外,几乎总是更好的从软件中获得所需的结果。您可以查看它是否有记录的API,可以调用它调用的相同Web服务,可以链接到它所做的相同库,也可以复制它使用的算法。
如果这些都不可接受的,那么您可能应该查看有关自动化测试的QT5教程。
特别是 QTest 命名空间。单击鼠标的函数有两个重载,称为 QTEST::mouseClick。
我认为这可能会做你想要的:
#include <QTest>
// class and function declarations removed here
QTest::mouseClick(d, Qt::LeftButton, Qt::NoModifier, QPoint(x,y));