我正在尝试制作一个应用程序,其中鼠标移动到屏幕上的某些位置并自动单击左键。
问题是我无法在 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自动化测试教程 http://doc.qt.io/qt-5/qttestlib-tutorial3-example.html.
具体来说QTest命名空间 http://doc.qt.io/qt-5/qtest.html。单击鼠标的函数有两个重载,称为QTEST::鼠标点击 http://doc.qt.io/qt-5/qtest.html#mouseClick.
我认为这可能会达到你想要的效果:
#include <QTest>
// class and function declarations removed here
QTest::mouseClick(d, Qt::LeftButton, Qt::NoModifier, QPoint(x,y));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)