Qt:从顶级父窗口小部件模拟QMouseButtonPress事件

时间:2018-05-19 08:48:42

标签: c++ qt

我使用QWidget作为顶部窗口,其中包含一些子窗口小部件。出于测试目的,我想通过仅指定鼠标单击的x / y坐标来模拟MouseButtonPress事件。

在顶部窗口中,我运行此代码:

QMouseEvent* evt = new QMouseEvent(
    QEvent::MouseButtonPress,
    QPointF(x_coord,y_coord),
    Qt::LeftButton,
    Qt::LeftButton,
    0);
// topWindow is a pointer to the top window QWidget
QApplication::postEvent(topWindow, evt);

x_coord和y_coord是顶部窗口的本地坐标,我之前记录过它们。

我通过app.installEventFilter(&eventFilter);安装了事件过滤器 我可以看到事件被发布,但事件永远不会传播到子窗口小部件 顶部窗口。我想,这是因为我指定了topWindow'作为事件的接收对象,对象无法传播事件" down"给它的孩子(但如果有的话,只能把它们传播给它的父母)。

对我来说重要的是我可以在顶部窗口和I中集中生成鼠标事件 不想在顶部窗口中维护每个子对象的指针列表(当然有多个小部件层次结构)。

如何发布事件以便在不知道指向该对象的指针的情况下将其发送到x_coord / y_coord上的对象?

1 个答案:

答案 0 :(得分:0)

我在这里找到了一个答案:QTest mouseClick on a QPushButton

本质上,事件不能发送到topWindow,但需要发送到x_coord / y_coord位置的正确子窗口小部件。可以使用此功能找到子窗口小部件:

QWidget *child = win->childAt( x_coord , y_coord );
QApplication::postEvent(topWindow, evt);