QMenuBar Class

Die Klasse QMenuBar bietet eine horizontale Menüleiste. Mehr...

Kopfzeile: #include <QMenuBar>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Vererbungen: 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()

Reimplementierte ö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

Reimplementierte 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

Detaillierte Beschreibung

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

menubar->addMenu(fileMenu);

Das kaufmännische Und im Text des Menüeintrags legt Alt+F als Tastaturkürzel für dieses Menü fest. (Sie können "&&" verwenden, um ein echtes kaufmännisches Und in der Menüleiste zu erhalten).

Es ist nicht notwendig, eine Menüleiste zu erstellen. Es setzt seine eigene Geometrie automatisch an den oberen Rand des übergeordneten Widgets und ändert sie entsprechend, wenn die Größe des übergeordneten Widgets geändert wird.

Verwendung

In den meisten Anwendungen im Stil des Hauptfensters würden Sie die Funktion menuBar() verwenden, die in QMainWindow bereitgestellt wird. Sie fügt QMenus zur Menüleiste und QActions zu den Popup-Menüs hinzu.

Beispiel (aus dem Beispiel Menüs ):

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

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

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

Plattformabhängiges Look and Feel

Verschiedene Plattformen haben unterschiedliche Anforderungen an das Aussehen von Menüleisten und ihr Verhalten, wenn der Benutzer mit ihnen interagiert. Windows-Systeme sind beispielsweise oft so konfiguriert, dass die unterstrichenen Zeichen, die Tastenkombinationen für Elemente 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-Desktop-Umgebungen wie Ubuntu Unity ist QMenuBar ein Wrapper für die Verwendung der systemweiten Menüleiste. Wenn Sie mehrere Menüleisten in einem Dialog haben, wird die äußerste Menüleiste (normalerweise innerhalb eines Widgets mit Widget-Flag Qt::Window) für die systemweite Menüleiste verwendet.

Qt für macOS bietet auch eine Funktion zum Zusammenführen von Menüleisten, um QMenuBar besser an das akzeptierte macOS-Menüleistenlayout anzupassen. Wenn ein Eintrag verschoben wird, werden seine Slots weiterhin ausgelöst, als wäre er an der ursprünglichen Stelle.

Die Zusammenführungsfunktion basiert auf dem QAction::menuRole() der Menüeinträge. Wenn ein Eintrag QAction::TextHeuristicRole hat, wird die Rolle durch String-Matching des Titels unter Verwendung der folgenden Heuristik bestimmt:

Übereinstimmende ZeichenfolgenPlatzierungAnmerkungen
about.*Anwendungsmenü | Über <Anwendungsname>Der Anwendungsname wird aus der Datei Info.plist geholt (siehe Hinweis unten). Wenn dieser Eintrag nicht gefunden wird, erscheint im Anwendungsmenü kein Eintrag About.
config, options, setup, settings oder preferencesAnwendungsmenü | EinstellungenWenn dieser Eintrag nicht gefunden wird, wird der Eintrag Einstellungen deaktiviert.
Verlassen oder BeendenAnwendungsmenü | Beenden <Anwendungsname>Wenn dieser Eintrag nicht gefunden wird, wird ein Standardbeendigungselement erstellt, das QCoreApplication::quit() aufruft.

Sie können dieses Verhalten außer Kraft setzen, indem Sie die Eigenschaft QAction::menuRole() auf QAction::NoRole setzen.

Wenn Sie möchten, dass sich alle Fenster eines Mac-Programms eine Menüleiste teilen, müssen Sie eine Menüleiste erstellen, die kein übergeordnetes Element hat. Erstellen Sie auf diese Weise eine Menüleiste ohne Elternteil:

QMenuBar *menuBar = new QMenuBar(nullptr);

Hinweis: Rufen Sie nicht QMainWindow::menuBar() auf, um die gemeinsame Menüleiste zu erstellen, da diese Menüleiste QMainWindow als übergeordnetes Element haben wird. Diese Menüleiste würde nur für die übergeordnete QMainWindow angezeigt werden.

Hinweis: Der Text, der für den Anwendungsnamen in der macOS-Menüleiste verwendet wird, stammt aus dem Wert, der in der Datei Info.plist im Bundle der Anwendung festgelegt ist. Siehe Qt für macOS - Bereitstellung für weitere Informationen.

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

Beispiele

Das Beispiel Menus zeigt, wie man QMenuBar und QMenu verwendet. Die anderen Beispiele für Hauptfensteranwendungen bieten ebenfalls Menüs, die diese Klassen verwenden.

Siehe auch QMenu, QShortcut, QAction, Einführung in die Apple Human Interface Guidelines, und Menus Example.

Dokumentation der Eigenschaften

defaultUp : bool

Diese Eigenschaft enthält die Ausrichtung des Popups

Die Standardausrichtung des Popups. Standardmäßig werden Menüs "unten" auf dem Bildschirm eingeblendet. Wenn Sie diese Eigenschaft auf true setzen, wird das Menü "oben" eingeblendet. Dies ist z. B. bei Menüs sinnvoll, die sich unterhalb des Dokuments befinden, auf das sie verweisen.

Wenn das Menü nicht auf den Bildschirm passt, wird automatisch die andere Richtung verwendet.

Zugriffsfunktionen:

bool isDefaultUp() const
void setDefaultUp(bool)

nativeMenuBar : bool

Diese Eigenschaft gibt an, ob eine Menüleiste auf Plattformen, die sie unterstützen, als native Menüleiste verwendet wird oder nicht

Diese Eigenschaft gibt an, ob die Menüleiste auf Plattformen, die dies unterstützen, als native Menüleiste verwendet werden soll oder nicht. Die derzeit unterstützten Plattformen sind macOS und Linux-Desktops, die die com.canonical.dbusmenu D-Bus-Schnittstelle verwenden (wie Ubuntu Unity). Wenn diese Eigenschaft true ist, wird die Menüleiste in der nativen Menüleiste verwendet und befindet sich nicht im Fenster ihres Elternteils; wenn false bleibt die Menüleiste im Fenster. Auf anderen Plattformen hat das Setzen dieses Attributs keine Auswirkung, und das Lesen dieses Attributs gibt immer false zurück.

Standardmäßig wird beachtet, ob das Attribut Qt::AA_DontUseNativeMenuBar für die Anwendung gesetzt ist. Das explizite Setzen dieser Eigenschaft setzt das Vorhandensein (oder Fehlen) des Attributs außer Kraft.

Zugriffsfunktionen:

bool isNativeMenuBar() const
void setNativeMenuBar(bool nativeMenuBar)

Dokumentation der Mitgliedsfunktionen

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

Konstruiert eine Menüleiste mit übergeordnetem parent.

[virtual noexcept] QMenuBar::~QMenuBar()

Zerstört die Menüleiste.

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

Gibt die QAction unter pt zurück. Gibt nullptr zurück, wenn es unter pt keine Aktion gibt oder wenn der Ort ein Trennzeichen hat.

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

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

Reimplements: QWidget::actionEvent(QActionEvent *event).

QRect QMenuBar::actionGeometry(QAction *act) const

Gibt die Geometrie der Aktion act als QRect zurück.

Siehe auch actionAt().

QAction *QMenuBar::activeAction() const

Gibt die QAction zurück, die gerade hervorgehoben ist, falls vorhanden, sonst nullptr.

Siehe auch setActiveAction().

QAction *QMenuBar::addMenu(QMenu *menu)

Fügt menu an die Menüleiste an. Gibt die menuAction() des Menüs zurück. Die Menüleiste übernimmt nicht den Besitz des Menüs.

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)

Hängt ein neues QMenu mit title an die Menüleiste an. Die Menüleiste wird Eigentümer des Menüs. Gibt das neue Menü zurück.

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

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

Hängt ein neues QMenu mit icon und title an die Menüleiste an. Die Menüleiste wird Eigentümerin des Menüs. Gibt das neue Menü zurück.

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

QAction *QMenuBar::addSeparator()

Hängt ein Trennzeichen an das Menü an.

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

Reimplements: QWidget::changeEvent(QEvent *Event).

void QMenuBar::clear()

Entfernt alle Aktionen aus der Menüleiste.

Hinweis: Unter macOS werden Menüpunkte, die in die Systemmenüleiste eingefügt wurden, nicht durch diese Funktion entfernt. Eine Möglichkeit, damit umzugehen, wäre, die zusätzlichen Aktionen selbst zu entfernen. Sie können die menu role für die verschiedenen Menüs einstellen, so dass Sie im Voraus wissen, welche Menüpunkte zusammengeführt werden und welche nicht. Dann entscheiden Sie 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 oder 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)

Reimplements: QWidget::event(QEvent *Event).

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

Reimplements: QObject::eventFilter(QObject *watched, QEvent *event).

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

Reimplements: QWidget::focusInEvent(QFocusEvent *event).

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

Reimplements: QWidget::focusOutEvent(QFocusEvent *event).

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

Reimplements: QWidget::heightForWidth(int w) const.

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

Dieses Signal wird ausgegeben, wenn eine Menüaktion hervorgehoben wird; 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 aus action. Diese Methode ist nützlich für Unterklassen, wenn sie ein QStyleOptionMenuItem benötigen, aber nicht alle Informationen selbst eingeben wollen.

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

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

Diese Komfortfunktion fügt menu vor der Aktion before ein und gibt das Menü menuAction() zurück.

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

QAction *QMenuBar::insertSeparator(QAction *before)

Diese Komfortfunktion erstellt eine neue Trennaktion, d.h. eine Aktion mit QAction::isSeparator(), die true zurückgibt. Die Funktion fügt die neu erstellte Aktion in die Liste der Aktionen in 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)

Reimplements: QWidget::keyPressEvent(QKeyEvent *event).

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

Reimplements: QWidget::leaveEvent(QEvent *Event).

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

Reimplantiert eine Zugriffsfunktion für die Eigenschaft: QWidget::minimumSizeHint.

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

Reimplements: QWidget::mouseMoveEvent(QMouseEvent *event).

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

Reimplements: QWidget::mousePressEvent(QMouseEvent *event).

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

Reimplements: QWidget::mouseReleaseEvent(QMouseEvent *event).

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

Reimplements: QWidget::paintEvent(QPaintEvent *event).

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

Reimplements: 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)

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

Die Menüleiste übernimmt das Eigentum an widget und fügt es in die Menüleiste ein. Wenn corner jedoch bereits ein Widget enthält, wird dieses vorherige Widget nicht mehr verwaltet und ist weiterhin ein sichtbares Kind 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)

Reimplantiert eine Zugriffsfunktion für die Eigenschaft: QWidget::visible.

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

Reimplantiert eine Zugriffsfunktion für die Eigenschaft: QWidget::sizeHint.

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

Reimplements: 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 kann den Delegaten für die native Menüleiste setzen. Wenn Sie Ihren eigenen Delegaten setzen müssen, stellen Sie sicher, dass Sie den ursprünglichen Delegaten speichern und alle Aufrufe an ihn weiterleiten.

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

Dieses Signal wird ausgesendet, wenn eine Aktion in einem zu dieser Menüleiste gehörenden Menü durch einen Mausklick ausgelöst wird; action ist die Aktion, die das Signal ausgelöst hat.

Hinweis: QMenuBar muss das Eigentum an QMenu haben, damit dieses Signal funktioniert.

Normalerweise verbinden Sie jede Menüaktion mit einem einzelnen Slot, indem Sie QAction::triggered() verwenden, aber manchmal werden Sie mehrere Elemente mit einem einzelnen Slot verbinden wollen (am häufigsten, wenn der Benutzer aus einem Array auswählt). Dieses Signal ist in solchen Fällen nützlich.

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

© 2025 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.