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()
        }
    }
相关推荐
失败才是人生常态7 分钟前
并发编程场景题学习
学习
醇氧7 分钟前
springAI学习 一
学习·spring·ai·ai编程
菜鸟‍10 分钟前
【论文学习】Co-Seg:互提示引导的组织与细胞核分割协同学习
人工智能·学习·算法
搞全栈小苏19 分钟前
LVGL与Qt深度对比分析:轻量与全能的技术博弈
qt·lvgl
程序员-King.30 分钟前
【Qt开源项目】— ModbusScope-day 1
qt·开源项目·modbus·modbusscope
YJlio30 分钟前
Active Directory 工具学习笔记(10.14):第十章·实战脚本包——AdExplorer/AdInsight/AdRestore 一键化落地
服务器·笔记·学习
东华万里34 分钟前
第十四篇 操作符详讲
c语言·学习·大学生专区
nwsuaf_huasir39 分钟前
深度学习2-pyTorch学习-张量基本操作
pytorch·深度学习·学习
d111111111d41 分钟前
江协科技-PID基本原理-(学习笔记)-主页有所有STM32外设的笔记基本都是万字起步。
笔记·科技·stm32·单片机·嵌入式硬件·学习
啦哈拉哈1 小时前
【Python】知识点零碎学习3
开发语言·python·学习