Qt: Имитировать события QMouseButtonPress из верхнего родительского виджета - PullRequest
0 голосов
/ 19 мая 2018

Я использую QWidget в качестве верхнего окна с некоторыми дочерними виджетами в нем.В целях тестирования я хочу смоделировать события MouseButtonPress, указав только координаты x / y щелчка мыши.

В верхнем окне я запускаю этот код:

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 в качестве принимающего объекта для события, и объект не может передавать событие «вниз» своим дочерним элементам (но может передавать их только своим родителям, если таковые были).

Для меня важно, чтобы я мог генерировать события мыши, централизованно расположенные в верхнем окне, и я не хочу вести список указателей для каждого дочернего объекта в верхнем окне (конечно, существует множество иерархийwidgets).

Как можно опубликовать событие, чтобы оно отправлялось объекту по адресу x_coord / y_coord, не зная указателя на этот объект?

1 Ответ

0 голосов
/ 24 мая 2018

Я нашел один ответ здесь: QTest mouseClick на QPushButton

По сути, событие не может быть отправлено в topWindow, но его нужно отправить в правильный дочерний виджет в x_coord/ y_coord position.Дочерний виджет можно найти с помощью этой функции:

QWidget *child = win->childAt( x_coord , y_coord );
QApplication::postEvent(topWindow, evt);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...