gpt4 book ai didi

c++ - 如何使用 QCoreApplication::postEvent 注入(inject)合成输入事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:52 27 4
gpt4 key购买 nike

我正在将通过网络传入的键盘和鼠标事件注入(inject)到我的 Qt 应用程序中,并为此使用 QCoreApplication::postEvent。鼠标坐标是绝对屏幕像素坐标。

QMouseEvent *event = new QMouseEvent(type, QPoint(x, y), mouse_button, mouse_buttons,
Qt::NoModifier);
QCoreApplication::postEvent(g_qtdraw.main.widget, event);

最初我只有一个小部件(由 g_qtdraw.main.widget 引用)所以我只是将它用作 postEvent 的接收者参数。现在我的应用程序有多个小部件,上面的代码不再执行我想要的操作。

第二个小部件以全屏模式显示,我知道所有鼠标事件都必须转到此窗口,但使用上面的代码它们仍然被路由到主小部件。

如何选择正确的小部件作为接收器(鼠标 x,y 坐标下的小部件)?是否有标准方法,以便 Qt 选择正确的小部件,或者我必须自己跟踪它?

最佳答案

你能用QApplication::widgetAt()吗?在该位置找到正确的小部件然后发布到那个位置?

QPoint pos(x, y);
QMouseEvent *event = new QMouseEvent(type, pos, mouse_button, mouse_buttons, Qt::NoModifier);
QWidget *receiver = QApplication::widgetAt(pos);
QCoreApplication::postEvent(receiver, event);

不过,我不认为您必须为关键事件执行此操作。它们应该被发送到焦点小部件 (QApplication::focusWidget())。

不幸的是,我还没有测试过这些。

关于c++ - 如何使用 QCoreApplication::postEvent 注入(inject)合成输入事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8729508/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com