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()
        }
    }
相关推荐
name好难取诶1 天前
一步一步学习使用LiveBindings() LiveBindings与具有动态呈现的TListView
学习
crary,记忆1 天前
Claude Code vs Claude Co-Work vs Gemini vs ChatGPT:全方位深度对比
人工智能·学习·chatgpt·ai编程
lazy H1 天前
Git worktree 怎么用?同时开发多个分支完整教程
大数据·git·后端·学习·搜索引擎·github
米码收割机1 天前
【项目】spring boot+vue学习目标完成管理系统(源码+文档)【独一无二】
vue.js·spring boot·学习
BFT白芙堂1 天前
Franka Research3 机械臂在 RL-100 机器人学习框架中的应用实践
学习·机器人
IT古董1 天前
【MES学习笔记系列】01 - MES 系统概述与行业背景
笔记·学习
辣知1 天前
《辣知化智》天文星斗与华夏血脉
学习
dear_bi_MyOnly1 天前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
一只小菜鸡..1 天前
南京大学 操作系统 (JYY) 学习笔记:从 UNIX 到 Linux 与庞大的应用生态
笔记·学习·unix
秋田君1 天前
QT_QFontDialog类字体对话框
开发语言·qt