Auf dieser Seite

QMenuBar Class

Die Klasse „QMenuBar“ stellt eine horizontale Menüleiste bereit. Mehr...

Header: #include <QMenuBar>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Erbt: QWidget

Eigenschaften

Öffentliche Funktionen

QMenuBar(QWidget *parent = nullptr)
virtual ~QMenuBar()
QAction *actionAt(const QPoint &pt) const
QRect actionGeometry(QAction *act) const
QAction *activeAction() const
QAction *addMenu(QMenu *menu)
QMenu *addMenu(const QString &title)
QMenu *addMenu(const QIcon &icon, const QString &title)
QAction *addSeparator()
void clear()
QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const
QAction *insertMenu(QAction *before, QMenu *menu)
QAction *insertSeparator(QAction *before)
bool isDefaultUp() const
bool isNativeMenuBar() const
void setActiveAction(QAction *act)
void setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)
void setDefaultUp(bool)
void setNativeMenuBar(bool nativeMenuBar)
NSMenu *toNSMenu()

Neu implementierte öffentliche Funktionen

virtual int heightForWidth(int) const override
virtual QSize minimumSizeHint() const override
virtual QSize sizeHint() const override

Öffentliche Slots

virtual void setVisible(bool visible) override

Signale

void hovered(QAction *action)
void triggered(QAction *action)

Geschützte Funktionen

virtual void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const

Neu implementierte geschützte Funktionen

virtual void actionEvent(QActionEvent *e) override
virtual void changeEvent(QEvent *e) override
virtual bool event(QEvent *e) override
virtual bool eventFilter(QObject *object, QEvent *event) override
virtual void focusInEvent(QFocusEvent *) override
virtual void focusOutEvent(QFocusEvent *) override
virtual void keyPressEvent(QKeyEvent *e) override
virtual void leaveEvent(QEvent *) override
virtual void mouseMoveEvent(QMouseEvent *e) override
virtual void mousePressEvent(QMouseEvent *e) override
virtual void mouseReleaseEvent(QMouseEvent *e) override
virtual void paintEvent(QPaintEvent *e) override
virtual void resizeEvent(QResizeEvent *) override
virtual void timerEvent(QTimerEvent *e) override

Ausführliche Beschreibung

Eine Menüleiste besteht aus einer Liste von Pulldown-Menüelementen. Menüelemente fügen Sie mit ` addMenu()` hinzu. Angenommen, ` menubar ` ist ein Zeiger auf eine `QMenuBar` und ` fileMenu ` ist ein Zeiger auf eine ` QMenu`, dann fügt die folgende Anweisung das Menü in die Menüleiste ein:

menubar->addMenu(fileMenu);

Das Und-Zeichen im Text des Menüelements legt Alt+F als Tastenkombination für dieses Menü fest. (Mit „&&“ können Sie ein echtes Und-Zeichen in der Menüleiste einfügen.)

Es ist nicht erforderlich, eine Menüleiste zu positionieren. Sie passt ihre Geometrie automatisch an den oberen Rand des übergeordneten Widgets an und ändert sie entsprechend, sobald die Größe des übergeordneten Widgets angepasst wird.

Verwendung

In den meisten Anwendungen im Hauptfenster-Stil würden Sie die in QMainWindow bereitgestellte Funktion „ menuBar()“ verwenden, um „ QMenu“ zur Menüleiste und „ QAction“ zu den Popup-Menüs hinzuzufügen.

Beispiel (aus dem Beispiel „Menüs“ ):

    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newAct);

Menüelemente können mit ` removeAction()` entfernt werden.

Widgets können zu Menüs hinzugefügt werden, indem Instanzen der Klasse „ QWidgetAction “ verwendet werden, um sie zu enthalten. Diese Aktionen können dann auf die übliche Weise in Menüs eingefügt werden; weitere Details finden Sie in der Dokumentation zu „ QMenu “.

Plattformabhängiges Erscheinungsbild

Verschiedene Plattformen stellen unterschiedliche Anforderungen an das Erscheinungsbild von Menüleisten und deren Verhalten, wenn der Benutzer mit ihnen interagiert. Beispielsweise sind Windows-Systeme oft so konfiguriert, dass die unterstrichenen Zeichen-Mnemonics, die Tastenkombinationen für Menüpunkte in der Menüleiste anzeigen, nur angezeigt werden, wenn die Taste ` Alt ` gedrückt wird.

QMenuBar als globale Menüleiste

Unter macOS und in bestimmten Linux-Desktopumgebungen wie Ubuntu Unity dient QMenuBar als Wrapper für die systemweite Menüleiste. Wenn ein Dialogfeld mehrere Menüleisten enthält, wird die äußerste Menüleiste (normalerweise innerhalb eines Widgets mit dem Widget-Flag ` Qt::Window`) als systemweite Menüleiste verwendet.

Qt für macOS bietet außerdem eine Funktion zum Zusammenführen von Menüleisten, damit sich QMenuBar besser an das übliche Layout der macOS-Menüleiste anpasst. Wenn ein Eintrag verschoben wird, werden seine Slots weiterhin ausgelöst, als befände er sich an seiner ursprünglichen Position.

Die Zusammenführungsfunktion basiert auf der Eigenschaft „ QAction::menuRole()“ der Menüeinträge. Wenn ein Element „ QAction::TextHeuristicRole “ aufweist, wird die Rolle anhand einer Zeichenfolgenübereinstimmung mit dem Titel unter Verwendung der folgenden Heuristiken bestimmt:

ZeichenfolgenabgleichPlatzierungHinweise
about.*Anwendungsmenü | Über <Anwendungsname>Der Anwendungsname wird aus der Datei „ Info.plist “ abgerufen (siehe Hinweis unten). Wird dieser Eintrag nicht gefunden, erscheint im Anwendungsmenü kein „Über“-Eintrag.
Konfiguration, Optionen, Einrichtung, Einstellungen oder VoreinstellungenAnwendungsmenü | EinstellungenWird dieser Eintrag nicht gefunden, ist der Menüpunkt „Einstellungen“ deaktiviert
Beenden oder VerlassenAnwendungsmenü | <Anwendungsname> beendenWird dieser Eintrag nicht gefunden, wird ein Standard-Menüpunkt „Beenden“ erstellt, der die Funktion ` QCoreApplication::quit()` aufruft

Sie können dieses Verhalten überschreiben, indem Sie die Eigenschaft „ QAction::menuRole()“ auf „ QAction::NoRole “ setzen.

Wenn Sie möchten, dass alle Fenster einer Mac-Anwendung eine gemeinsame Menüleiste nutzen, müssen Sie eine Menüleiste ohne übergeordnete Menüleiste erstellen. Erstellen Sie eine Menüleiste ohne übergeordnete Menüleiste wie folgt:

QMenuBar *menuBar = new QMenuBar(nullptr);

Hinweis: Rufen Sie zum Erstellen der gemeinsamen Menüleiste nicht ` QMainWindow::menuBar()` auf, da diese Menüleiste sonst ` QMainWindow ` als übergeordnetes Element erhält. Diese Menüleiste würde dann nur für die übergeordnete ` QMainWindow` angezeigt werden.

Hinweis: Der Text, der für den Anwendungsnamen in der macOS-Menüleiste verwendet wird, wird aus dem Wert entnommen, der in der Datei ` Info.plist ` im Anwendungsbundle festgelegt ist. Weitere Informationen finden Sie unter „Qt für macOS – Bereitstellung “.

Hinweis: Wenn unter Linux der Dienst „com.canonical.AppMenu.Registrar“ auf dem D-Bus-Sitzungsbus verfügbar ist, kommuniziert Qt wie beschrieben mit diesem, um die Menüs der Anwendung in der globalen Menüleiste zu installieren.

Beispiele

Das Beispiel „Menus“ zeigt, wie man QMenuBar und QMenu verwendet. Auch die anderen Anwendungsbeispiele mit Hauptfenstern stellen Menüs mithilfe dieser Klassen bereit.

Siehe auch „ QMenu“ , „ QShortcut “, „ QAction “, „Einführung in die Apple Human Interface Guidelines“ und das Beispiel „Menüs“.

Dokumentation zu den Eigenschaften

defaultUp : bool

Diese Eigenschaft legt die Ausrichtung des Popups fest

Die Standardausrichtung des Popups. Standardmäßig werden Menüs auf dem Bildschirm „nach unten“ eingeblendet. Wenn Sie die Eigenschaft auf „true“ setzen, wird das Menü „nach oben“ eingeblendet. Dies können Sie für Menüs verwenden, die sich unterhalb des Dokuments befinden, auf das sie verweisen.

Sollte das Menü nicht auf den Bildschirm passen, wird automatisch die andere Richtung verwendet.

Zugriffsfunktionen:

bool isDefaultUp() const
void setDefaultUp(bool)

nativeMenuBar : bool

Diese Eigenschaft legt fest, ob eine Menüleiste auf Plattformen, die dies unterstützen, als native Menüleiste verwendet wird oder nicht

Diese Eigenschaft legt fest, ob die Menüleiste auf Plattformen, die dies unterstützen, als native Menüleiste verwendet werden soll oder nicht. Derzeit werden macOS sowie Linux-Desktops unterstützt, die die D-Bus-Schnittstelle „com.canonical.dbusmenu“ verwenden (z. B. Ubuntu Unity). Ist diese Eigenschaft auf „ true “ gesetzt, wird die Menüleiste als native Menüleiste verwendet und befindet sich nicht im Fenster ihres übergeordneten Elements; bei „ false “ verbleibt die Menüleiste im Fenster. Auf anderen Plattformen hat das Setzen dieser Eigenschaft keine Auswirkung, und beim Auslesen dieser Eigenschaft wird stets „ false “ zurückgegeben.

Standardmäßig richtet sich die Verhaltensweise danach, ob das Attribut „ Qt::AA_DontUseNativeMenuBar “ für die Anwendung gesetzt ist. Durch das explizite Setzen dieser Eigenschaft wird das Vorhandensein (oder Fehlen) des Attributs überschrieben.

Zugriffsfunktionen:

bool isNativeMenuBar() const
void setNativeMenuBar(bool nativeMenuBar)

Dokumentation zu Mitgliedsfunktionen

[explicit] QMenuBar::QMenuBar(QWidget *parent = nullptr)

Erstellt eine Menüleiste mit der übergeordneten „ parent “.

[virtual noexcept] QMenuBar::~QMenuBar()

Blendet die Menüleiste aus.

QAction *QMenuBar::actionAt(const QPoint &pt) const

Gibt die URL „ QAction “ unter pt zurück. Gibt „ nullptr “ zurück, wenn unter pt keine Aktion vorhanden ist oder wenn die URL ein Trennzeichen enthält.

Siehe auch QWidget::addAction() und addSeparator().

[override virtual protected] void QMenuBar::actionEvent(QActionEvent *e)

Implementiert: ` QWidget::actionEvent` (`QActionEvent *event`).

QRect QMenuBar::actionGeometry(QAction *act) const

Gibt die Geometrie des Aktions act s als „ QRect “ zurück.

Siehe auch ` actionAt()`.

QAction *QMenuBar::activeAction() const

Gibt die aktuell markierte „ QAction “ zurück, sofern vorhanden, andernfalls „ nullptr “.

Siehe auch „ setActiveAction()“.

QAction *QMenuBar::addMenu(QMenu *menu)

Fügt „ menu “ zur Menüleiste hinzu. Gibt die `menuAction()` des Menüs zurück. Die Menüleiste übernimmt keine Verantwortung für das Menü.

Hinweis: Das zurückgegebene QAction -Objekt kann verwendet werden, um das entsprechende Menü auszublenden.

Siehe auch „ QWidget::addAction()“ und „ QMenu::menuAction()“.

QMenu *QMenuBar::addMenu(const QString &title)

Fügt der Menüleiste ein neues Menü „ QMenu “ mit dem Eintrag „ title “ hinzu. Die Menüleiste übernimmt die Verantwortung für das Menü. Gibt das neue Menü zurück.

Siehe auch „ QWidget::addAction()“ und „ QMenu::menuAction()“.

QMenu *QMenuBar::addMenu(const QIcon &icon, const QString &title)

Fügt der Menüleiste ein neues Menü „ QMenu “ mit den Einträgen „ icon “ und „ title “ hinzu. Die Menüleiste übernimmt die Kontrolle über das Menü. Gibt das neue Menü zurück.

Siehe auch „ QWidget::addAction()“ und „ QMenu::menuAction()“.

QAction *QMenuBar::addSeparator()

Fügt dem Menü ein Trennzeichen hinzu.

[override virtual protected] void QMenuBar::changeEvent(QEvent *e)

Umsetzt: ` QWidget::changeEvent(QEvent *event)`.

void QMenuBar::clear()

Entfernt alle Aktionen aus der Menüleiste.

Hinweis: Unter macOS werden Menüelemente, die in die Systemmenüleiste integriert wurden, von dieser Funktion nicht entfernt. Eine Möglichkeit, damit umzugehen, wäre, die zusätzlichen Aktionen selbst zu entfernen. Sie können die Option „ menu role “ in den verschiedenen Menüs festlegen, sodass Sie im Voraus wissen, welche Menüelemente integriert werden und welche nicht. Entscheiden Sie dann selbst, was Sie neu erstellen oder entfernen möchten.

Siehe auch „ removeAction()“.

QWidget *QMenuBar::cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const

Gibt das Widget links vom ersten bzw. rechts vom letzten Menüpunkt zurück, abhängig von corner.

Hinweis: Die Verwendung einer anderen Ecke als „ Qt::TopRightCorner “ oder „ Qt::TopLeftCorner “ führt zu einer Warnung.

Siehe auch setCornerWidget().

[override virtual protected] bool QMenuBar::event(QEvent *e)

Umsetzt: ` QWidget::event(QEvent *event)`.

[override virtual protected] bool QMenuBar::eventFilter(QObject *object, QEvent *event)

Implementiert: ` QObject::eventFilter` (`QObject *watched, QEvent *event`).

[override virtual protected] void QMenuBar::focusInEvent(QFocusEvent *)

Implementiert: ` QWidget::focusInEvent(QFocusEvent *event)`.

[override virtual protected] void QMenuBar::focusOutEvent(QFocusEvent *)

Umsetzt: ` QWidget::focusOutEvent(QFocusEvent *event)`.

[override virtual] int QMenuBar::heightForWidth(int) const

Implementiert neu: ` QWidget::heightForWidth(int w) const`.

[signal] void QMenuBar::hovered(QAction *action)

Dieses Signal wird ausgelöst, wenn eine Menüaktion markiert ist; „ action “ ist die Aktion, die das Senden des Ereignisses ausgelöst hat.

Häufig wird dies zur Aktualisierung von Statusinformationen verwendet.

Siehe auch „ triggered()“ und „ QAction::hovered()“.

[virtual protected] void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const

Initialisieren Sie ` option ` mit den Werten aus der Menüleiste und den Informationen von action. Diese Methode ist für Unterklassen nützlich, wenn diese ein ` QStyleOptionMenuItem` benötigen, aber nicht alle Informationen selbst eingeben möchten.

Siehe auch ` QStyleOption::initFrom()` und ` QMenu::initStyleOption()`.

QAction *QMenuBar::insertMenu(QAction *before, QMenu *menu)

Diese Hilfsfunktion fügt vor der Aktion „ before “ die Aktion „ menu “ ein und gibt die Menüs über „menuAction()“ zurück.

Siehe auch „ QWidget::insertAction()“ und „ addMenu()“.

QAction *QMenuBar::insertSeparator(QAction *before)

Diese Hilfsfunktion erstellt eine neue Trennzeichen-Aktion, d. h. eine Aktion, bei der QAction::isSeparator() den Wert „true“ zurückgibt. Die Funktion fügt die neu erstellte Aktion in die Aktionsliste dieser Menüleiste vor der Aktion „ before “ ein und gibt sie zurück.

Siehe auch QWidget::insertAction() und addSeparator().

[override virtual protected] void QMenuBar::keyPressEvent(QKeyEvent *e)

Implementiert: ` QWidget::keyPressEvent(QKeyEvent *event)`.

[override virtual protected] void QMenuBar::leaveEvent(QEvent *)

Umsetzt: ` QWidget::leaveEvent(QEvent *event)`.

[override virtual] QSize QMenuBar::minimumSizeHint() const

Implementiert eine Zugriffsfunktion für die Eigenschaft „ QWidget::minimumSizeHint “ neu.

[override virtual protected] void QMenuBar::mouseMoveEvent(QMouseEvent *e)

Implementiert: ` QWidget::mouseMoveEvent` (`QMouseEvent *event`).

[override virtual protected] void QMenuBar::mousePressEvent(QMouseEvent *e)

Implementiert: ` QWidget::mousePressEvent(QMouseEvent *event)`.

[override virtual protected] void QMenuBar::mouseReleaseEvent(QMouseEvent *e)

Implementiert: ` QWidget::mouseReleaseEvent` (`QMouseEvent *event`).

[override virtual protected] void QMenuBar::paintEvent(QPaintEvent *e)

Umsetzt: ` QWidget::paintEvent` (`QPaintEvent *event`).

[override virtual protected] void QMenuBar::resizeEvent(QResizeEvent *)

Implementiert: ` QWidget::resizeEvent(QResizeEvent *event)`.

void QMenuBar::setActiveAction(QAction *act)

Setzt die aktuell markierte Aktion auf „ act “.

Siehe auch „ activeAction()“.

void QMenuBar::setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)

Dadurch wird das angegebene „ widget “ je nach „ corner “ direkt links neben dem ersten Menüpunkt oder rechts neben dem letzten Menüpunkt angezeigt.

Die Menüleiste übernimmt die Verantwortung für „ widget “ und ordnet es der Menüleiste als untergeordnetes Element zu. Enthält „ corner “ jedoch bereits ein Widget, wird dieses bisherige Widget nicht mehr verwaltet und bleibt weiterhin ein sichtbares untergeordnetes Element der Menüleiste.

Hinweis: Die Verwendung einer anderen Ecke als ` Qt::TopRightCorner ` oder ` Qt::TopLeftCorner ` führt zu einer Warnung.

Siehe auch ` cornerWidget()`.

[override virtual slot] void QMenuBar::setVisible(bool visible)

Implementiert eine Zugriffsfunktion für die Eigenschaft „ QWidget::visible “ neu.

[override virtual] QSize QMenuBar::sizeHint() const

Implementiert eine Zugriffsfunktion für die Eigenschaft „ QWidget::sizeHint “ neu.

[override virtual protected] void QMenuBar::timerEvent(QTimerEvent *e)

Implementiert: ` QObject::timerEvent(QTimerEvent *event)`.

NSMenu *QMenuBar::toNSMenu()

Gibt das native NSMenu für diese Menüleiste zurück. Nur unter macOS verfügbar.

Hinweis: Qt legt möglicherweise den Delegaten für die native Menüleiste fest. Wenn Sie einen eigenen Delegaten festlegen möchten, stellen Sie sicher, dass Sie den ursprünglichen Delegaten speichern und alle Aufrufe an diesen weiterleiten.

[signal] void QMenuBar::triggered(QAction *action)

Dieses Signal wird ausgelöst, wenn eine Aktion in einem Menü dieser Menüleiste durch einen Mausklick ausgelöst wird; „ action “ ist die Aktion, die zur Auslösung des Signals geführt hat.

Hinweis: „ QMenuBar “ muss Eigentümer des „ QMenu “ sein, damit dieses Signal funktioniert.

Normalerweise verbinden Sie jede Menüaktion mithilfe von ` QAction::triggered()` mit einem einzelnen Slot, aber manchmal möchten Sie mehrere Elemente mit einem einzelnen Slot verbinden (meistens, wenn der Benutzer aus einem Array auswählt). In solchen Fällen ist dieses Signal nützlich.

Siehe auch „ hovered()“ und „ QAction::triggered()“.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.