Menu QML Type
Popup-Menü, das als Kontextmenü oder Popup-Menü verwendet werden kann. Mehr...
Import Statement: | import QtQuick.Controls |
Inherits: |
Eigenschaften
- cascade : bool
(since QtQuick.Controls 2.3 (Qt 5.10))
- contentData : list<QtObject>
- contentModel : model
- count : int
(since QtQuick.Controls 2.3 (Qt 5.10))
- currentIndex : int
(since QtQuick.Controls 2.3 (Qt 5.10))
- delegate : Component
(since QtQuick.Controls 2.3 (Qt 5.10))
- focus : bool
- icon
- icon.cache : bool
- icon.color : color
- icon.height : int
- icon.name : string
- icon.source : url
- icon.width : int
- overlap : real
(since QtQuick.Controls 2.3 (Qt 5.10))
- title : string
Methoden
- Action actionAt(int index)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void addAction(Action action)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void addItem(Item item)
- void addMenu(Menu menu)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void dismiss()
(since QtQuick.Controls 2.3 (Qt 5.10))
- void insertAction(int index, Action action)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void insertItem(int index, Item item)
- void insertMenu(int index, Menu menu)
(since QtQuick.Controls 2.3 (Qt 5.10))
- Item itemAt(int index)
- Menu menuAt(int index)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void moveItem(int from, int to)
- void popup(MenuItem item)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void popup(Item parent, MenuItem item)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void popup(point pos, MenuItem item)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void popup(Item parent, point pos, MenuItem item)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void popup(real x, real y, MenuItem item)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void popup(Item parent, real x, real y, MenuItem item)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void removeAction(Action action)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void removeItem(Item item)
(since QtQuick.Controls 2.3 (Qt 5.10))
- void removeMenu(Menu menu)
(since QtQuick.Controls 2.3 (Qt 5.10))
- Action takeAction(int index)
(since QtQuick.Controls 2.3 (Qt 5.10))
- MenuItem takeItem(int index)
(since QtQuick.Controls 2.3 (Qt 5.10))
- Menu takeMenu(int index)
(since QtQuick.Controls 2.3 (Qt 5.10))
Detaillierte Beschreibung
Natives macOS-Menü. | Nicht-natives Menü im Material-Stil. |
Das Menü hat zwei Hauptanwendungsfälle:
- Kontextmenüs, z. B. ein Menü, das nach einem Rechtsklick angezeigt wird
- Popup-Menüs, z. B. ein Menü, das nach einem Klick auf eine Schaltfläche angezeigt wird
Bei der Verwendung als Kontextmenü wird empfohlen, das Menü durch den Aufruf von popup() zu öffnen. Wenn nicht explizit eine Position angegeben wird, wird das Menü auf Desktop-Plattformen, die über einen Mauszeiger verfügen, am Mauszeiger positioniert und ansonsten über seinem übergeordneten Element zentriert.
MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: { if (mouse.button === Qt.RightButton) contextMenu.popup() } onPressAndHold: { if (mouse.source === Qt.MouseEventNotSynthesized) contextMenu.popup() } Menu { id: contextMenu MenuItem { text: "Cut" } MenuItem { text: "Copy" } MenuItem { text: "Paste" } } }
Bei der Verwendung als Popup-Menü ist es am einfachsten, die Position anzugeben, indem man die gewünschten Koordinaten x und y über die entsprechenden Eigenschaften angibt und open() aufruft, um das Menü zu öffnen.
Button { id: fileButton text: "File" onClicked: menu.open() Menu { id: menu y: fileButton.height MenuItem { text: "New..." } MenuItem { text: "Open..." } MenuItem { text: "Save" } } }
Wenn die Schaltfläche auch das Menü schließen soll, wenn sie angeklickt wird, verwenden Sie das Flag Popup.CloseOnPressOutsideParent
:
onClicked: menu.visible = !menu.visible Menu { // ... closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
Seit QtQuick.Controls 2.3 (Qt 5.10) ist es auch möglich, Untermenüs zu erstellen und Action-Objekte innerhalb von Menu zu deklarieren:
Menu { Action { text: "Cut" } Action { text: "Copy" } Action { text: "Paste" } MenuSeparator { } Menu { title: "Find/Replace" Action { text: "Find Next" } Action { text: "Find Previous" } Action { text: "Replace" } } }
Untermenüs sind standardmäßig cascading auf Desktop-Plattformen, die über einen Mauszeiger verfügen. Nicht-kaskadierende Menüs werden jeweils einzeln und zentriert über dem übergeordneten Menü angezeigt.
Normalerweise werden Menüeinträge statisch als Kinder des Menüs deklariert, aber Menu bietet auch eine dynamische API für add, insert, move und remove Einträge. Auf die Einträge in einem Menü kann mit itemAt() oder contentChildren zugegriffen werden.
Obwohl MenuItems am häufigsten mit Menu verwendet wird, kann es jede Art von Element enthalten.
Ränder
Da es von Popup geerbt wurde, unterstützt Menu margins. Standardmäßig geben alle eingebauten Stile 0
für die Ränder von Menu an, um sicherzustellen, dass das Menü innerhalb der Grenzen des Fensters gehalten wird. Um ein Menü außerhalb des Fensters zuzulassen (z. B. um es zu animieren, wenn es sich in die Ansicht bewegt), setzen Sie die Eigenschaft margins auf -1
.
Menüpunkte dynamisch generieren
Sie können Menüpunkte mit Instantiator oder dynamischer Objekterstellung dynamisch erstellen.
Verwendung von Instantiator
Sie können Menüpunkte dynamisch mit Instantiator erzeugen. Der folgende Code zeigt, wie Sie ein Untermenü "Letzte Dateien" implementieren können, wobei die Einträge aus einer Liste von Dateien stammen, die in den Einstellungen gespeichert sind:
Menu { title: qsTr("File") Menu { id: recentFilesMenu title: qsTr("Recent Files") enabled: recentFilesInstantiator.count > 0 Instantiator { id: recentFilesInstantiator model: settings.recentFiles delegate: MenuItem { text: settings.displayableFilePath(modelData) onTriggered: loadFile(modelData) } onObjectAdded: (index, object) => recentFilesMenu.insertItem(index, object) onObjectRemoved: (index, object) => recentFilesMenu.removeItem(object) } MenuSeparator {} MenuItem { text: qsTr("Clear Recent Files") onTriggered: settings.clearRecentFiles() } } }
Dynamische Objekterzeugung verwenden
Sie können eine Komponente auch dynamisch aus einer QML-Datei laden, indem Sie Qt.createComponent() verwenden. Sobald die Komponente fertig ist, können Sie ihre Methode createObject() aufrufen, um eine Instanz dieser Komponente zu erstellen.
Row { anchors.centerIn: parent Component { id: menuItemComponent MenuItem {} } Button { id: button text: "Menu" onClicked: menu.open() Menu { id: menu } } Button { text: "Add item" onClicked: { onClicked: { let menuItem = menuItemComponent.createObject( menu.contentItem, { text: qsTr("New item") }) menu.addItem(menuItem) } } } }
Menü-Typen
Seit Qt 6.8 bietet ein Menü drei verschiedene Implementierungen, abhängig von der Plattform. Sie können wählen, welche bevorzugt werden soll, indem Sie popupType setzen. Damit können Sie steuern, ob ein Menü als separates Fenster, als Element innerhalb des übergeordneten Fensters oder als natives Menü angezeigt werden soll. Weitere Informationen zu diesen Optionen finden Sie unter here.
Die Standardeinstellung popupType wird durch den Stil bestimmt. Der macOS-Stil legt beispielsweise Popup.Native
fest, während der Imagine-Stil Popup.Window
verwendet (was der Standard ist, wenn der Stil keinen Popup-Typ festlegt). Wenn Sie einem Menü Anpassungen hinzufügen und möchten, dass diese unabhängig vom Stil verwendet werden, sollten Sie den Popup-Typ explizit auf Popup.Window
(oder Popup.Item
) setzen. Eine andere Alternative ist die Einstellung Qt::AA_DontUseNativeMenuWindows
application attribute . Dadurch werden die nativen Kontextmenüs für die gesamte Anwendung deaktiviert, unabhängig vom Stil.
Die Voreinstellung popupType wird durch den Stil bestimmt. Der macOS-Stil zum Beispiel setzt ihn auf Popup.Native
, während der Imagine-Stil Popup.Window
verwendet (was der Standard ist, wenn der Stil keinen Popup-Typ festlegt). Wenn Sie einem Menü Anpassungen hinzufügen und möchten, dass diese unabhängig vom Stil verwendet werden, sollten Sie den Popup-Typ explizit auf Popup.Window
(oder Popup.Item
) setzen.
Ob ein Menü den bevorzugten Typ verwenden kann, hängt von der Plattform ab. Popup.Item
wird auf allen Plattformen unterstützt, aber Popup.Window
wird normalerweise nur auf Desktop-Plattformen unterstützt. Wenn sich das Menü innerhalb eines native menubar befindet, ist das Menü ebenfalls nativ. Und wenn das Menü ein Untermenü innerhalb eines anderen Menüs ist, entscheidet das übergeordnete (oder Stamm-)Menü über den Typ.
Beschränkungen bei der Verwendung nativer Menüs
Bei der Einstellung von popupType auf Popup.Native
gibt es einige Einschränkungen und Unterschiede im Vergleich zur Verwendung von Popup.Item
und Popup.Window
.
API-Unterschiede
Bei der Verwendung nativer Menüs wird nur eine Teilmenge der Menü-API auf allen Plattformen unterstützt:
- x
- y
- visible
- opened
- title
- count
- contentData
- contentChildren (visuelle Kinder werden nicht sichtbar sein)
- contentModel
- open()
- popup()
- close()
- opened()
- closed()
- aboutToShow()
- aboutToHide()
Darüber hinaus ist die Anzeige eines Popup-Menüs (z. B. mit open() oder popup()) auf einigen Plattformen ein blockierender Aufruf. Das bedeutet, dass der Aufruf nicht zurückkehrt, bevor das Menü wieder geschlossen wird, was sich auf die Logik in Ihrer Anwendung auswirken kann. Dies ist vor allem dann zu berücksichtigen, wenn Ihre Anwendung auf mehrere Plattformen ausgerichtet ist und daher manchmal auf Plattformen läuft, auf denen native Menüs nicht unterstützt werden. In diesem Fall wird der PopupType z. B. auf Popup.Item
zurückfallen, und die Aufrufe von open() werden nicht blockiert.
Elemente wie MenuItem reagieren immer noch auf Klicks im entsprechenden nativen Menüelement, indem sie z. B. Signale ausgeben, werden aber durch ihr natives Gegenstück ersetzt.
Unterschiede bei der Darstellung
Native Menüs werden mithilfe der auf der Plattform verfügbaren nativen Menü-APIs implementiert. Diese Menüs und ihr gesamter Inhalt werden daher von der Plattform und nicht von QML gerendert. Das bedeutet, dass delegate nicht für das Rendering verwendet wird. Es wird jedoch immer instanziiert (aber versteckt), so dass Funktionen wie onCompleted() unabhängig von der Plattform und popupType ausgeführt werden.
Unterstützte Plattformen
Native Menüs werden derzeit auf den folgenden Plattformen unterstützt:
- Android
- iOS
- Linux (nur als eigenständiges Kontextmenü verfügbar, wenn es mit dem GTK+-Plattformthema ausgeführt wird)
- macOS
- Windows
Siehe auch Menü anpassen, MenuItem, Menü-Steuerelemente, Popup-Steuerelemente, Dynamische QML-Objekterzeugung aus JavaScript, Popup type, [QML], und popupType.
Dokumentation der Eigenschaften
cascade : bool |
Diese Eigenschaft legt fest, ob das Menü seine Untermenüs kaskadiert.
Der Standardwert ist plattformspezifisch. Auf Desktop-Plattformen, die über einen Mauszeiger verfügen, werden Menüs standardmäßig kaskadiert. Bei nicht kaskadierenden Menüs wird jeweils ein Menü angezeigt und über dem übergeordneten Menü zentriert.
Hinweis: Das Ändern des Werts der Eigenschaft hat keine Auswirkungen, solange das Menü geöffnet ist.
Hinweis: Diese Eigenschaft wird nur unterstützt, wenn ein non-native Menu verwendet wird.
Diese Eigenschaft wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Siehe auch overlap.
Diese Eigenschaft enthält die Liste der Inhaltsdaten.
Die Liste enthält alle Objekte, die in QML als Kinder des Menüs deklariert wurden, sowie Elemente, die mit den Methoden addItem() und insertItem() dynamisch hinzugefügt oder eingefügt wurden.
Hinweis: Im Gegensatz zu contentChildren
enthält contentData
auch nicht-visuelle QML-Objekte. Sie wird nicht neu geordnet, wenn Elemente eingefügt oder verschoben werden.
Siehe auch Item::data und contentChildren.
contentModel : model |
Diese Eigenschaft enthält das Modell, das zur Anzeige von Menüpunkten verwendet wird.
Das Inhaltsmodell wird für Visualisierungszwecke bereitgestellt. Es kann als Modell einem Inhaltselement zugewiesen werden, das den Inhalt des Menüs darstellt.
Menu { id: menu contentItem: ListView { model: menu.contentModel } }
Das Modell ermöglicht es, Menüpunkte statisch als Kinder des Menüs zu deklarieren.
count : int |
Diese Eigenschaft enthält die Anzahl der Einträge.
Diese Eigenschaft wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
currentIndex : int |
Diese Eigenschaft enthält den Index des aktuell hervorgehobenen Eintrags.
Menüpunkte können durch Mouse-Hover oder Tastaturnavigation hervorgehoben werden.
Hinweis: Diese Eigenschaft wird nur unterstützt, wenn ein non-native Menu verwendet wird.
Diese Eigenschaft wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Siehe auch MenuItem::highlighted.
delegate : Component |
Diese Eigenschaft enthält die Komponente, die verwendet wird, um Elemente zur Präsentation von Aktionen zu erstellen.
Hinweis: Delegierte sind nur sichtbar, wenn ein non-native Menu verwendet wird.
Diese Eigenschaft wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Siehe auch Action.
focus : bool |
Diese Eigenschaft gibt an, ob das Popup den Fokus haben möchte.
Wenn das Popup tatsächlich den Fokus erhält, wird activeFocus zu true
. Für weitere Informationen siehe Tastaturfokus in Qt Quick.
Der Standardwert ist true
.
Hinweis: Diese Eigenschaft wird nur unterstützt, wenn ein non-native Menu verwendet wird.
Siehe auch activeFocus.
Diese Eigenschaftsgruppe wurde in QtQuick. Controls 6.5 hinzugefügt.
Name | Beschreibung |
---|---|
Name | Diese Eigenschaft enthält den Namen des zu verwendenden Symbols. Das Symbol wird aus dem Thema der Plattform geladen. Wenn das Symbol im Thema gefunden wird, wird es immer verwendet, auch wenn icon.source ebenfalls eingestellt ist. Wenn das Symbol nicht gefunden wird, wird stattdessen icon.source verwendet. Weitere Informationen über Theme-Symbole finden Sie unter QIcon::fromTheme(). |
source | Diese Eigenschaft enthält den Namen des zu verwendenden Symbols. Das Symbol wird als normales Bild geladen. Wenn icon.name gesetzt ist und auf ein gültiges Themensymbol verweist, wird es immer anstelle dieser Eigenschaft verwendet. |
Breite | Diese Eigenschaft gibt die Breite des Symbols an. Die Breite des Symbols wird diesen Wert nie überschreiten, obwohl es bei Bedarf verkleinert wird. |
Höhe | Diese Eigenschaft gibt die Höhe des Symbols an. Die Höhe des Symbols wird diesen Wert nie überschreiten, wird aber bei Bedarf verkleinert. |
Farbe | Diese Eigenschaft enthält die Farbe des Symbols. Das Symbol wird mit der angegebenen Farbe eingefärbt, es sei denn, die Farbe ist auf |
cache | Diese Eigenschaft gibt an, ob das Symbol zwischengespeichert werden soll. Der Standardwert ist true. Weitere Informationen finden Sie unter cache. Diese Eigenschaft wurde eingeführt in QtQuick. Controls 2.13. |
Hinweis: Diese Eigenschaft wird nur unterstützt, wenn ein non-native Menu verwendet wird.
Siehe auch AbstractButton::text, AbstractButton::display, und Icons in Qt Quick Controls.
overlap : real |
Diese Eigenschaft gibt die Anzahl der Pixel an, um die das Menü sein übergeordnetes Menü horizontal überlappt.
Die Eigenschaft hat nur Auswirkungen, wenn das Menü als kaskadierendes Untermenü verwendet wird.
Der Standardwert ist stilabhängig.
Hinweis: Die Änderung des Eigenschaftswerts hat keine Auswirkung, solange das Menü geöffnet ist.
Hinweis: Diese Eigenschaft wird nur unterstützt, wenn ein non-native Menu verwendet wird.
Diese Eigenschaft wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Siehe auch cascade.
title : string |
Diese Eigenschaft enthält den Titel des Menüs.
Der Titel eines Menüs wird oft im Text eines Menüeintrags angezeigt, wenn es sich um ein Untermenü handelt, und im Text eines Toolbuttons, wenn er sich in einer Menüleiste befindet.
Dokumentation der Methode
Öffnet das Menü am Mauszeiger auf Desktop-Plattformen, die über einen Mauszeiger verfügen, und zentriert das Menü andernfalls über seinem parent Element.
Das Menü kann optional auf einen bestimmten Menüpunkt item ausgerichtet werden. Dieses Element wird dann zu current.. Wenn kein item angegeben ist, wird currentIndex auf -1
gesetzt.
Diese QML-Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Siehe auch Popup::open().
Öffnet das Menü an der angegebenen Position pos im Popup-Koordinatensystem, d. h. an einer Koordinate relativ zu seinem parent Element.
Das Menü kann optional an einem bestimmten Menüpunkt item ausgerichtet werden. Dieses Element wird dann zu current.. Wenn kein item angegeben ist, wird currentIndex auf -1
gesetzt.
Diese QML-Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Siehe auch Popup::open().
Öffnet das Menü an der angegebenen Position x, y im Popup-Koordinatensystem, d. h. an einer Koordinate relativ zu seinem Element parent.
Das Menü kann optional an einem bestimmten Menüpunkt item ausgerichtet werden. Dieses Element wird dann zu current.. Wird kein item angegeben, wird currentIndex auf -1
gesetzt.
Diese QML-Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Siehe auch dismiss() und Popup::open().
Gibt die Aktion an index zurück, oder null
wenn der Index nicht gültig ist oder es keine Aktion am angegebenen Index gibt.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
|
Fügt action am Ende des Menüs hinzu.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
void addItem(Item item) |
Fügt item an das Ende der Liste der Elemente hinzu.
|
Fügt menu als Untermenü an das Ende dieses Menüs an.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
|
Schließt alle Menüs in der Hierarchie, zu der dieses Menü gehört.
Hinweis: Im Gegensatz zu close(), das nur ein Menü und seine Untermenüs schließt (bei Verwendung von non-native menus), schließt dismiss()
die gesamte Hierarchie der Menüs, einschließlich der übergeordneten Menüs. In der Praxis eignet sich close()
z.B. zur Implementierung der Navigation in einer Menühierarchie, und dismiss()
ist die geeignete Methode zum Schließen der gesamten Menühierarchie.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Siehe auch popup() und Popup::close().
Fügt action unter index ein. Der Index befindet sich innerhalb aller Einträge des Menüs.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Fügt menu als Untermenü unter index ein. Der Index befindet sich in allen Einträgen des Menüs.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Gibt das Untermenü unter index zurück, oder null
, wenn der Index nicht gültig ist oder es kein Untermenü am angegebenen Index gibt.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
|
Entfernt und zerstört das angegebene action.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
|
Entfernt und zerstört das angegebene item.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
|
Entfernt und zerstört das angegebene menu.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Entfernt und gibt die Aktion unter index zurück. Der Index befindet sich in allen Einträgen des Menüs.
Hinweis: Das Eigentum an der Aktion wird an den Aufrufer übertragen.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Entfernt den Artikel und gibt ihn unter index zurück.
Hinweis: Das Eigentum an dem Element wird an den Aufrufer übertragen.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
Entfernt und gibt das Menü unter index zurück. Der Index befindet sich innerhalb aller Einträge des Menüs.
Hinweis: Der Besitz des Menüs wird an den Aufrufer übertragen.
Diese Methode wurde in QtQuick.Controls 2.3 (Qt 5.10) eingeführt.
© 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.