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
- defaultUp : bool
- nativeMenuBar : bool
Ö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
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:
| Zeichenfolgenabgleich | Platzierung | Hinweise |
|---|---|---|
| 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 Voreinstellungen | Anwendungsmenü | Einstellungen | Wird dieser Eintrag nicht gefunden, ist der Menüpunkt „Einstellungen“ deaktiviert |
| Beenden oder Verlassen | Anwendungsmenü | <Anwendungsname> beenden | Wird 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:
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.
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.