ContextMenu QML Type
Der angehängte Typ ContextMenu bietet eine Möglichkeit, ein Kontextmenü in einer plattformgerechten Weise zu öffnen. Mehr...
Import Statement: | import QtQuick.Controls |
Since: | Qt 6.9 |
Eigenschaften
- menu : Menu
Signale
- requested(point position)
Detaillierte Beschreibung
ContextMenu kann an jede item angehängt werden, um ein Kontextmenü auf ein plattformspezifisches Ereignis hin anzuzeigen, wie z.B. einen Rechtsklick oder die Kontextmenütaste.
Pane { anchors.fill: parent ContextMenu.menu: Menu { MenuItem { text: qsTr("Eat Tomato") onTriggered: { /* ... */ } } MenuItem { text: qsTr("Throw Tomato") onTriggered: { /* ... */ } } MenuItem { text: qsTr("Squash Tomato") onTriggered: { /* ... */ } } } }
Gemeinsame Nutzung von Kontextmenüs
Es ist möglich, ein Menu für mehrere angehängte Kontextmenü-Objekte freizugeben. Dies ermöglicht die Wiederverwendung eines einzigen Menüs, wenn die Elemente, die Kontextmenüs benötigen, gemeinsame Daten haben. Zum Beispiel:
pragma ComponentBehavior: Bound import QtQuick import QtQuick.Controls.Basic import QtQuick.Templates as T ApplicationWindow { width: 600 height: 400 visible: true component Tomato: Label { id: tomato objectName: text horizontalAlignment: Label.AlignHCenter verticalAlignment: Label.AlignVCenter width: Math.max(200, contentWidth * 1.5, contentWidth * 1.5) height: width color: skinColor function eat() { print("Ate " + text) } function ditch() { print("Threw " + text) } function squash() { print("Squashed " + text) } property color skinColor: "tomato" background: Rectangle { color: tomato.skinColor radius: width / 2 } ContextMenu.menu: contextMenu } Menu { id: contextMenu readonly property Tomato triggerItem: parent as Tomato readonly property string triggerItemText: triggerItem?.text ?? "" MenuItem { text: qsTr("Eat %1").arg(contextMenu.triggerItemText) onTriggered: contextMenu.triggerItem.eat() } MenuItem { text: qsTr("Throw %1").arg(contextMenu.triggerItemText) onTriggered: contextMenu.triggerItem.ditch() } MenuItem { text: qsTr("Squash %1").arg(contextMenu.triggerItemText) onTriggered: contextMenu.triggerItem.squash() } } Row { anchors.centerIn: parent Tomato { text: qsTr("tomato") } Tomato { text: qsTr("really ripe tomato") skinColor: "maroon" } } }
Leistung
ContextMenu erstellt sein Menu
nur dann, wenn es angefordert wird. Ohne diese Optimierung würde Menu
erstellt werden, wenn die enthaltende Komponente geladen wird, was typischerweise beim Start der Anwendung der Fall ist.
Es wird empfohlen, der Menu
, die der Eigenschaft menu von ContextMenu zugewiesen ist, keine ID zu geben, wenn sie dort definiert ist, wo sie zugewiesen ist. Auf diese Weise wird diese Optimierung verhindert. Ein Beispiel:
Pane { anchors.fill: parent ContextMenu.menu: Menu { // This prevents lazy creation of the Menu. id: myMenu // ... } }
Das Beispiel im Abschnitt Sharing context menus funktioniert, weil Menu
getrennt von seiner Zuweisung definiert ist.
Interaktion mit anderen Menüs
Wenn ein Menu
z.B. über TapHandler oder auf andere Weise geöffnet wird, wird das ContextMenu nicht gleichzeitig geöffnet. Dadurch können ältere Anwendungen, die vor der Einführung von ContextMenu geschrieben wurden, weiterhin wie erwartet funktionieren.
Eigenschaft Dokumentation
menu : Menu |
Diese Eigenschaft enthält das Kontextmenü, das geöffnet wird. Sie kann auf ein beliebiges Menu Objekt gesetzt werden.
Hinweis: Die dieser Eigenschaft zugewiesene Menu kann nicht mit einer ID versehen werden. Siehe Sharing context menus für weitere Informationen.
Signal Dokumentation
requested(point position) |
Dieses Signal wird ausgesendet, wenn ein Kontextmenü angefordert wird.
Wenn es durch einen Klick mit der rechten Maustaste angefordert wurde, gibt position die Position des Klicks relativ zum übergeordneten Objekt an.
Das folgende Beispiel zeigt, wie man programmatisch ein Kontextmenü öffnet:
Button { id: button text: qsTr("Click me!") ContextMenu.onRequested: position => { const menu = buttonMenu.createObject(button) menu.popup(position) } } Component { id: buttonMenu Menu { MenuItem { text: qsTr("Open") } } }
Wenn kein Menü gesetzt ist, aber dieses Signal verbunden ist, wird das Kontextmenü-Ereignis akzeptiert und nicht weitergegeben.
Hinweis: Der entsprechende Handler ist onRequested
.
Siehe auch QContextMenuEvent::pos().
© 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.