Question

I'm using Qt 4.7.4 on Mac OS X 10.7.4, and I'm trying to add a QMenuBar and a QMenu to my application without success.

When looking for examples, I found the Basic Layouts and the screenshot of the interface on Windows displays the File menu, which is what I'm trying to do:

enter image description here

However, running this example on Mac OS X doesn't show the File menu inside the application window:

enter image description here

and it also doesn't show in the top Mac OS X bar:

enter image description here

It seems that this is either a bug of Qt 4.7.4 on Mac OS X, or we are required to do some tweaks on the source code to make it work on Mac.

How can I fix this problem?

I've found similar posts on Stack Overflow but none helped.

Was it helpful?

Solution

There is no problem in the code, nor in Qt. The example you cite only creates an Exit action in the menu. On OS X, such actions belong in the application menu, not in the File menu. Your application is called qt_menu, and that's how the application menu is called, and that's where you will find the Quit action -- Qt has correctly renamed it to agree with Apple's HIG. On Windows, it'd be customary to call it Exit, on a Mac it's bad style. Qt's behavior is correct, and I can reproduce it.

Add other actions to the file menu, or simply rename the one action from Exit to something else.

Note that Qt doesn't move actions directly based on their name. Qt guesses the action roles based on their name. You should override such guesses and set action roles explicitly using QAction::setMenuRole(). Those roles then get interpreted appropriately on various platforms.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top