原理非常简单,先写个 Menu ,通过 MouseArea 来填充需要右键菜单的区域。然后在 onClicked 信号中,让 Menu x、y 等于当前鼠标的 x、y ,最后用调用Menu的 open() 方法将菜单在该位置显示出来。

import QtQuick
import QtQuick.Controls.Material
import QtQuick.Controls
Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("右键菜单演示")
    Menu
    {
        id: rightMenu
        MenuItem
        {
            text: "复制"
            icon.source: "imgs/复制.png"
        }
        MenuItem
        {
            text: "粘贴"
            icon.source: "imgs/粘贴.png"
        }
        MenuItem
        {
            text: "剪贴"
            icon.source: "imgs/剪贴.png"
        }
    }
    MouseArea
    {
        anchors.fill: parent
        acceptedButtons: Qt.RightButton //接收鼠标右键
        
        onClicked:
        {
            rightMenu.x = mouseX
            rightMenu.y = mouseY
            rightMenu.open