Auf dieser Seite

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

Signale

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

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.