如何使用Qt模拟鼠标事件?

6
我想使用Qt模拟鼠标事件。例如,当我按下键盘上的某个键时,程序可以模拟鼠标点击事件。我尝试了下面的代码,但是当我按下“K”键时,程序停止并给出错误: The program has unexpectedly finished.
    case Qt::Key_K:
        QMouseEvent *mEvnPress;
        QMouseEvent *mEvnRelease;
        mEvnPress = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
        mEvnRelease = new QMouseEvent(QEvent::MouseButtonRelease, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
        QCoreApplication::sendEvent(QWidget::focusWidget(),mEvnPress);
        QCoreApplication::sendEvent(QWidget::focusWidget(),mEvnRelease);
        break;
请注意,您需要在程序中添加QMouseEvent头文件才能使用该类。

还有其他错误吗?它是崩溃了吗?当您使用调试器或QtCreator运行它时会发生什么?它会在某一行停止吗? - sFuller
它可以在qtcreator中正常运行并显示主窗口。当我按下键'K'时,没有更多的输出,也没有出现“程序意外终止”的提示,主窗口也正常显示。 - Tairy
sendEvent的第一个参数似乎有些奇怪。你正在将事件发送到最后聚焦的小部件。focusWidget可能会返回NULL吗?也许你应该尝试将其发送到主窗口,看看是否有效。 - sFuller
2个回答

3

有一个名为QtTestLib的工具,它专门用于编写测试,并且其中有一个mouseClick函数可以满足您的要求。

如果您不想使用此模块,您可以查看其源代码,了解如何正确模拟鼠标事件。


0

你需要使用 QtestEventList 类。使用 addmouseclick 添加事件,然后模拟执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接