我使用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上的对象?
答案 0 :(得分:0)
我在这里找到了一个答案:QTest mouseClick on a QPushButton
本质上,事件不能发送到topWindow,但需要发送到x_coord / y_coord位置的正确子窗口小部件。可以使用此功能找到子窗口小部件:
QWidget *child = win->childAt( x_coord , y_coord );
QApplication::postEvent(topWindow, evt);