[Interest] Capture keyPressEvent on QMenuBar/QMenu?

Israel Brewster ibrewster at flyravn.com
Thu Oct 11 19:42:06 CEST 2018


On Oct 11, 2018, at 8:36 AM, Israel Brewster <ibrewster at flyravn.com<mailto:ibrewster at flyravn.com>> wrote:



On Oct 11, 2018, at 2:54 AM, Frederik Christiani via Interest <interest at qt-project.org<mailto:interest at qt-project.org>> wrote:

On 11-10-2018 02:02, Tony Rietwyk wrote:
Hi Israel,
Try installEventFilter on the menu to see the KeyPress events before they are handled by the menu.

In the eventFilter you'll want to look at the events of type
QEvent::ShortcutOverride. Remember to accept() the event if you don't want the shortcut action triggered.



Ok, I tried with using an eventFilter, as per the documentation at http://doc.qt.io/qt-5/qobject.html#installEventFilter. As a test, I used their example code exactly for the implementation of the KeyPressEater class. I tried this in two ways: 1) installing the event filter on my QMenuBar object, and 2) installing the eventFilter on the base QApplication object, as per the documentation at http://doc.qt.io/qt-5/eventsandfilters.html#event-filters, which says:

"It is also possible to filter all events for the entire application, by installing an event filter on the QApplication or QCoreApplication object. Such global event filters are called before the object-specific filters."

When installed on my QMenuBar object, the eventFilter function was *never* called, as far as I can determine. When installed on the QApplication object, the eventFilter function *was* called as expected - right up until I activated a menu. ANY menu - even the Apple menu. At that point, the eventFilter function stopped receiving events.

I am running Qt 5.9.6 on MacOS X 10.13 and 10.14 (tried both with the same behavior). It sort of appears that the system is taking over the menu bar entirely, such that events simply don't make it to my application *at all* when the menu is activated. Is something like that a possibility?


In digging deeper into the documentation, I found this: http://doc.qt.io/qt-5/osx-issues.html#limitations, which states:

"QMenu objects used in the native menu bar are not able to handle Qt events via the normal event handlers. Install a delegate on the menu itself to be notified of these changes"

So I guess I need to install a delegate on the menu itself. Can someone point me to the documentation for that? Thanks.
-----------------------------------------------
Israel Brewster
Systems Analyst II
5245 Airport Industrial Rd
Fairbanks, AK 99709
(907) 450-7293
-----------------------------------------------

-----------------------------------------------
Israel Brewster
Systems Analyst II
5245 Airport Industrial Rd
Fairbanks, AK 99709
(907) 450-7293
-----------------------------------------------
Kind regards,
Frederik

--
Frederik Christiani
Viking Software
https://www.vikingsoftware.com/
_______________________________________________
Interest mailing list
Interest at qt-project.org<mailto:Interest at qt-project.org>
http://lists.qt-project.org/mailman/listinfo/interest

_______________________________________________
Interest mailing list
Interest at qt-project.org<mailto:Interest at qt-project.org>
http://lists.qt-project.org/mailman/listinfo/interest

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20181011/f6811338/attachment.html>


More information about the Interest mailing list