У меня следующая проблема с Qt (кажется, что ни один ответ на этом сайте не решает именно эту проблему, поэтому я создаю свой собственный вопрос).
У меня есть приложение с классом MainWindow, которое наследуется от QWidget. В определенный момент в главном окне есть таблица, и я хочу перехватить все события нажатия мыши за пределами этой таблицы.
Моим первым решением было переопределить метод
/* virtual */ void MainWindow::mousePressEvent(QMouseEvent *event)
В этом методе я проверяю положение события и проверяю, что оно не входит в QRect таблицы. К сожалению, я понял, что mousePressEvent () вызывается не всегда. Я подозреваю, что если я нажму на другой дочерний виджет MainWindow, этот виджет потребляет событие и не передает его родителю.
Таким образом, единственная альтернативная идея, которая у меня была, - это переопределить метод mousePressEvent () для всех виджетов, содержащихся в MainWindow. Это, конечно, неосуществимо, потому что:
- Их много: было бы очень сложно, отнимать много времени, быть подверженным ошибкам и трудным в обслуживании, если бы пришлось менять все классы виджетов, которые создаются в MainWindow.
- Некоторые из подвиджетов реализованы в некоторых библиотечных модулях, разработанных в параллельном проекте, поэтому я не могу их изменить.
- В других случаях подвиджеты напрямую используют классы Qt.
- Даже если бы я определил пользовательские подклассы для 2 и 3, мне нужно было бы убедиться, что эти подклассы используются везде вместо исходных классов. Это может означать, что мы снова вернемся к случаю 2.
Так что это альтернативное решение кажется мне неосуществимым.
Подводя итог: знаете ли вы, есть ли простой метод для перехвата всех щелчков мышью в главном окне из класса MainWindow?