Не могли бы вы объяснить почему надо фильтр устанавливать на вьюпорт виджета? И почему фильтр на сам виджет работает для клавиатуры и не работает для мышиных кликов?
Мышиные события передаются непосредственно в окно, в котором было сделано нажатие, т.е. в твоём случае это окно вьюпорта.
Клавиатурные события сначала приходят в топ-левел окно и уже "фокус-менеджер" пересылает событие в в саб-окно, которое имеет фокус.