Наведите курсор мыши на подвиджет, но какой? - PullRequest
0 голосов
/ 17 февраля 2011

Представьте себе окно, разработанное с помощью Qt Designer. Много подвиджетов. Для этого окна есть производный класс QWidget, который реализует методы виртуальной мыши QWidget (mousePressEvent, mouseReleaseEvent, mouseMoveEvent)

Некоторые из подвиджетов не содержат элементов управления и определены в таблице стилей как «background: transparent»

Мой вопрос:

Когда щелкают по такому прозрачному подвиджету, я вызываю MousePressEvent в моем производном классе QWidget. Это все хорошо. Тем не менее, я хотел бы знать, КАКОЙ субвиджет был только что нажат. Я бы хотел избежать сравнения геометрии, чтобы сопоставить местоположение клика с размерами моих подвиджетов.

Есть ли способ получить эту информацию из объекта mouseEvent? Кажется, я не вижу ничего, связанного с originator события мыши.

Ответы [ 2 ]

1 голос
/ 17 февраля 2011
  1. Вы должны написать класс (унаследованный от QObject) с переопределенной функцией bool eventFilter(QObject *obj, QEvent *event);.
  2. Вы должны установить экземпляр этого класса как фильтр событий во всех необходимых подвиджетах: http://doc.qt.io/qt-5/qobject.html#installEventFilter.

В переопределенной функции bool eventFilter(QObject *obj, QEvent *event); вы можете определить, какие подвиджеты сначала получают MouseEvent.

0 голосов
/ 17 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...