我正在尝试制作一个应用程序,在这个应用程序中,鼠标移动到屏幕上的特定位置,然后自动单击左键。问题是我不能在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,因为我并不真正需要跨平台的应用程序,但我在同样的问题上遇到了困难。
发布于 2016-01-08 08:51:52
我知道这有点晚了,但还是有办法做你想做的。一般而言,创建或模拟用户界面事件仅用于自动化测试。
如果你想要一些计算或算法的结果,除了自动化它的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));https://stackoverflow.com/questions/21680565
复制相似问题