ContextMenu QML Type
Der angehängte Typ „ContextMenu“ bietet eine Möglichkeit, ein Kontextmenü plattformgerecht zu öffnen. Mehr...
| Import Statement: | import QtQuick.Controls |
| Since: | Qt 6.9 |
Eigenschaften
- menu : Menu
Signale
- requested(point position)
Ausführliche Beschreibung
ContextMenu kann an jedes „ item “ angehängt werden, um bei einem plattformspezifischen Ereignis, wie beispielsweise einem Rechtsklick oder dem Drücken der Kontextmenü-Taste, ein Kontextmenü anzuzeigen.
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 “ von mehreren angehängten Kontextmenüobjekten gemeinsam nutzen zu lassen. Dies ermöglicht die Wiederverwendung eines einzigen Menüs, wenn die Elemente, die Kontextmenüs benötigen, gemeinsame Daten aufweisen. 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 “ erst bei Bedarf. Ohne diese Optimierung würde das „ Menu “ bereits beim Laden der übergeordneten Komponente erstellt werden, was in der Regel beim Start der Anwendung geschieht.
Es wird empfohlen, dem „ Menu “, das der „ menu “-Eigenschaft von ContextMenu zugewiesen ist, keine ID zuzuweisen, wenn es an der Stelle definiert wird, an der die Zuweisung erfolgt. Andernfalls wird diese Optimierung verhindert. 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, da die „ Menu “ getrennt von ihrer Zuweisung definiert wird.
Interaktion mit anderen Menüs
Wenn ein „ Menu “ beispielsweise über eine „ TapHandler “-Eigenschaft oder auf andere Weise geöffnet wird, wird ContextMenu nicht gleichzeitig geöffnet. Dadurch können ältere Anwendungen, die vor der Einführung von ContextMenu geschrieben wurden, weiterhin wie erwartet funktionieren.
Unterstützung für native Menüs
ContextMenu wird unter iOS durch ein natives Menü unterstützt.
Hinweis: Wenn Sie ein eigenes ` menu` zuweisen, müssen Sie ` popupType ` auf ` Popup.Native ` setzen, um die native Menüunterstützung sicherzustellen.
Dokumentation zu den Eigenschaften
menu : Menu
Diese Eigenschaft enthält das Kontextmenü, das geöffnet wird. Sie kann auf ein beliebiges „ Menu “-Objekt gesetzt werden.
Hinweis: Dem dieser Eigenschaft zugewiesenen „ Menu “ darf keine ID zugewiesen werden. Weitere Informationen finden Sie unter Sharing context menus.
Signal-Dokumentation
requested(point position)
Dieses Signal wird ausgelöst, wenn ein Kontextmenü angefordert wird.
Wurde es durch einen Klick mit der rechten Maustaste aufgerufen, gibt ` position ` die Position des Klicks relativ zum übergeordneten Element zurück.
Das folgende Beispiel zeigt, wie man ein Kontextmenü programmgesteuert ö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ü festgelegt ist, dieses Signal jedoch angeschlossen ist, wird das Kontextmenü-Ereignis angenommen und nicht weitergegeben.
Hinweis: Der entsprechende Handler ist ` onRequested`.
Siehe auch QContextMenuEvent::pos().
© 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.