2010-11-28 4 views
1

Qt prend-il en charge l'interaction avec la barre de menus native d'une fenêtre arbitraire (par exemple QWidget) sous Windows et Linux?Qt et menus natifs

Il semble que Qt traite le menu comme étant simplement un autre widget enfant à placer sur la fenêtre parente. Autrement dit, pour avoir une barre de menu, je dois lui réserver de l'espace dans la zone client de la fenêtre. Cela n'a aucun sens sur Mac, avec son menu en haut de l'écran. Sous Windows, cela n'a aucun sens - le menu, tel qu'il est implémenté par le système, est en dehors de la zone client. Vous ne savez pas quel est le modèle natif sous Linux. Qt supporte les menus natifs sur Mac et sur Windows.

Répondre

1

Qt Il peut sembler, en regardant les formulaires dans Qt Designer, que les menus Qt sur Mac ne sont pas standard, mais ils ne le sont pas. Qt a fait beaucoup pour gérer les différences entre les plates-formes supportées et elles fonctionnent très bien.

+0

Bon à savoir. Alors, comment attribuer ou accéder à la barre de menu native d'une fenêtre? setMenuBar() n'est défini que pour QLayout et QMainWindow, pas pour un QWidget générique. –

+0

Les menus ne sont possibles que pour QLayout/QMainWindow. Si vous avez besoin d'un menu contextuel pour un widget, ajoutez un QAction via QWidget :: addAction et définissez QWidget :: setContextMenuPolicy (Qt :: ActionsContextMenu). – WolfgangA

+0

Comment ça se fait? Chaque QWidget peut être une fenêtre de niveau supérieur. Chaque fenêtre de niveau supérieur peut avoir un menu dans Windows. –