2010-11-28 8 views
1

Unterstützt Qt die Interaktion mit der nativen Menüleiste eines beliebigen Fensters (z. B. QWidget) unter Windows und Linux?Qt und native Menüs

Es sieht so aus, als ob Qt das Menü als nur ein weiteres Kind-Widget behandelt, das im übergeordneten Fenster platziert wird. Das heißt, um eine Menüleiste zu haben, muss ich etwas Platz dafür im Kundenbereich des Fensters reservieren. Das macht keinen Sinn auf Mac, mit seinem Menü oben auf dem Bildschirm. Unter Windows macht es wenig Sinn - das Menü, wie es vom System implementiert wird, befindet sich außerhalb des Client-Bereichs. Nicht sicher, was das native Modell unter Linux ist.

Antwort

1

Qt unterstützt native Menüs auf Mac und Windows. Wenn man sich die Formulare in Qt Designer anschaut, scheint es, dass Qt-Menüs auf dem Mac nicht Standard sind, aber das sind sie nicht. Qt hatte viel unternommen, um sich mit den Unterschieden zwischen den unterstützten Plattformen auseinanderzusetzen, und sie funktionieren sehr gut.

+0

Gut zu wissen. Wie kann ich die native Menüleiste eines Fensters zuweisen oder darauf zugreifen? setMenuBar() ist nur für QLayout und QMainWindow definiert, nicht für ein generisches QWidget. –

+0

Menüs sind nur für QLayout/QMainWindow möglich. Wenn Sie ein kontextsensitives Menü für ein Widget benötigen, fügen Sie eine QAction über QWidget :: addAction hinzu und setzen Sie QWidget :: setContextMenuPolicy (Qt :: ActionsContextMenu). – WolfgangA

+0

Wie kommt es? Jedes QWidget kann ein Top-Level-Fenster sein. Jedes Fenster der obersten Ebene kann ein Menü in Windows enthalten. –