QML鼠标右键菜单

原理非常简单,先写个Menu ,通过MouseArea 来填充需要右键菜单的区域。然后在onClicked 信号中,让Menux、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()
        }
    }
相关推荐
还不秃顶的计科生15 分钟前
具身智能论文学习8:Octo: An Open-Source Generalist Robot Policy
人工智能·深度学习·学习·机器学习·语言模型·vla·vlm
woshihuanglaoshi40 分钟前
事务加持防超卖:ArkTS 在鸿蒙里玩转 TRANSACTION 出入库
学习·华为·harmonyos
世人万千丶1 小时前
去重插入与超限淘汰:ArkTS 实现鸿蒙搜索历史的 LIMIT 艺术
运维·服务器·学习·华为·harmonyos·鸿蒙
2601_949950632 小时前
在线练题更方便,用练题簿打造属于自己的移动题库
学习·考研·刷题·小程序推荐
woshihuanglaoshi3 小时前
十二商品二十流水:鸿蒙进销存种子数据装满预警看板
学习·华为·harmonyos
MartinYeung53 小时前
[论文学习]ProAct:针对LLM越狱的主动防禦框架
网络·学习·安全
weixin_431600444 小时前
NestJS 入门(10):日志——为什么常用 Winston?
后端·学习·日志·nest.js·winston
何事误红尘4 小时前
ZYNQ学习ARM裸机笔记():VITIS
学习
不懂的浪漫5 小时前
吴恩达《AI Engineering Skills Map》译读:四项核心能力与持续学习底座
人工智能·学习
蒸蒸yyyyzwd6 小时前
cpp选手秋招准备 学习笔记day7 webserver
笔记·学习