QML鼠标右键菜单

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

javascript 复制代码
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()
        }
    }
}

运行效果截图如下:

这里有2点需要注意一下,1个是接收鼠标右键:acceptedButtons: Qt.RightButton 。还有个是获取当前鼠标的位置x、y。

获取鼠标的位置有2种写法,我上面贴出的是简单一点的写法,还有一种稍微有一点不同,但是2种写法都能正常运行,以我目前的菜鸟水准也看出这2者之间的区别在哪。

第2中写法代码如下:

javascript 复制代码
MouseArea
    {
        anchors.fill: parent
        acceptedButtons: Qt.RightButton //接收鼠标右键

        onClicked: (mouse)=>
        {
            rightMenu.x = mouse.x
            rightMenu.y = mouse.y
            rightMenu.open()
        }
    }
相关推荐
li星野5 小时前
相位补偿学习记录:把被颅骨“打乱“的声波重新对齐
学习
Z21-X6 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
red_redemption6 小时前
自由学习记录(230)
学习
晓梦林10 小时前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习
Godspeed Zhao20 小时前
从零开始学AI25——无监督学习之层次聚类
学习·机器学习·聚类
David猪大卫1 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger1 天前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
fengci.1 天前
CTF2MISC中等部分
开发语言·前端·学习
YueTann1 天前
mgtv5th-baseline学习
学习
慧都产品智能化1 天前
Qt 表格升级攻略:复用已有编辑器,减少重复开发
c++·qt·编辑器·qt6.3