2016-11-27 7 views
0

Я пытаюсь запустить сразу два обработчика QWidget::mousePressEvent(). У меня есть два виджета: A и B. B наследуется от QLabel, A от QWidget. Я перегрузил QWidget::mousePressEvent() на оба из них. Виджет из B получает QPoint позицию курсора, и он работает. Виджет получает эту информацию из класса B, но, к сожалению, только если я нахожусь где-то еще за виджетами B (в синей области). Итак, что мне делать, чтобы запустить QWidget::mousePressEvent() из виджета A, если я нажимаю на коричневое пространство из виджета B?QWidget :: mousePressEvent() на двух виджетах сразу

enter image description here

ответ

1

Существует event->ignore(), так как А позади В то предположительно А родитель Б (может быть не прямой, но это не имеет значения до тех пор, как это вниз по дереву), так что если в конце B::mousePressEvent() вы event->ignore(), то событие продолжит распространение вниз и вызовет A mousePressEvent(). В конце концов, если ничто иное не поглотит событие по пути.

Кроме того, поскольку предположительно mousePressEvent() просто вызывает некоторые функции, вы также можете вручную сделать это из обработчика событий B для A, все, что вам нужно, является ссылкой на него, что тривиально реализовать. Возможно, вам придется сопоставить координаты родительскому объекту, если они релевантны.

+0

event-> ignore() был именно тем, что мне нужно! Большое спасибо! (: – Tatarinho