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
- 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() |
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
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 Zeichenfolgen | Platzierung | Anmerkungen |
---|---|---|
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 preferences | Anwendungsmenü | Einstellungen | Wenn dieser Eintrag nicht gefunden wird, wird der Eintrag Einstellungen deaktiviert. |
Verlassen oder Beenden | Anwendungsmenü | 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:
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.
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.