QT之QML(简单示例)

news2025/4/11 20:45:08

需求一:点击按钮弹出菜单,并且自定义菜单弹出位置。

mouse.xmouse.y 获取的是相对于 MouseArea(在这个例子中是 Button)左上角的局部坐标。如果你想要在鼠标点击位置显示 Menu,你需要将这个局部坐标转换为相对于应用程序窗口或屏幕的全局坐标。

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Demo Cloud Music Player")
    //从全局对象拿到的点是正确的

    MouseArea{
        anchors.fill: parent
        hoverEnabled: true
        onClicked: {
        console.log("mouse = ",mouseX,mouseY,mouse )

        myMenu.popup(mouseX,mouseY)
        }
    }
    // 创建一个菜单并添加菜单项
  Menu {
      id: myMenu
      MenuItem {
          text: "Option 1"
          onTriggered: console.log("Option 1 selected")
      }
      MenuItem {
          text: "Option 2"
          onTriggered: console.log("Option 2 selected")
      }
      MenuItem {
          text: "Option 3"
          onTriggered: console.log("Option 3 selected")
      }
  }

    Button{
        id:myButton
        width: 100
        height: 100
        x:100
        // 将菜单与按钮关联
        // menu: myMenu
        background:Rectangle{
            width: 25
            height: 25
            color: "red"
            border.color: "blue"
        }
        //方式一:从MouseArea获取到点的位置发现不正确
        MouseArea{
            anchors.fill: parent
            hoverEnabled: true
            onClicked: {
                var globalPos = myButton.mapToGlobal(mouse.x, mouse.y)
                console.log("MouseArea = ",mouseX,mouseY)
                console.log("mouse对象 = ",mouse.x,mouse.y,mouse )
                console.log("globalPos对象 = ",globalPos.x,globalPos.y,globalPos )
                //方式二
                //mouse.x获取到的值是对于当前控件来说,需要加上偏移量
                myMenu.popup(mouse.x+myButton.x, mouse.y)

                console.log("myMenu对象 = ",myMenu.x,myMenu.y,myMenu )

            }
        }
        //正确方式一:
        // onClicked: {
        //     console.log("clicked")
        //     // 获取按钮的全局坐标这俄格应该是获取到的是控件坐标
        //      // var globalPos = myButton.mapToItem(null, 0, myButton.height)
        //     // 在按钮下方显示菜单,先让他显示出来获取到坐标在显示一遍进行实现
        //     myMenu.popup() // 默认就会在鼠标的当前位置打开。。。
        //     console.log("x = ",myMenu.x,"y = " ,myMenu.y)
        //     var x = myMenu.x +10
        //     var y = myMenu.y +10
        //     myMenu.popup(x,y)
        // }

        Keys.onLeftPressed: {
            console.log("left")
        }
        Keys.onRightPressed:{
            console.log("right")
        }
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2328261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Springcache+xxljob实现定时刷新缓存

目录 SpringCache详解 SpringCache概述 核心原理 接口抽象与多态 AOP动态代理 核心注解以及使用 公共属性 cacheNames KeyGenerator:key生成器 key condition:缓存的条件,对入参进行判断 注解 xxl-job详解 SpringcacheRedis实现…

vue2拖拉拽做个模拟公式工具

1. 成图 2. 介绍 就是简单拖拉拽来做个规则运算器&#xff0c;具体运算规则、校验规则自己加。 3. 代码 HTML代码 <template><div class"red-cont"><div class"red-top"><divclass"red-top-left"><div class&quo…

Windows查重工具,强烈推荐大家收藏!

我大家在用电脑的时候&#xff0c;是不是发现用得越久&#xff0c;电脑里的软件和文件就越多&#xff1f; 今天我给大家带来的这两款重复文件查找神器&#xff0c;简直就是电脑里的“清洁小能手”&#xff0c;能帮你把那些重复的文件和文件夹找出来。 Easy DupLicate Finder 重…

使用python完成手写数字识别

入门图像识别的第一个案例,看到好多小伙伴分享,也把自己当初的思路捋捋,写成一篇博客,作为记录和分享,也欢迎各位交流讨论。 实现思路 数据集:MNIST(包含60,000个训练样本和10,000个测试样本) 深度学习框架:Keras(基于TensorFlow) 模型架构:卷积神经网络(CNN) 实…

OpenLayers:如何控制Overlay的层级?

我最近在使用Overlay的时候遇到了一个问题&#xff0c;我向地图中添加了两种不同的Overlay&#xff08;下图中的蓝色标牌和粉色标牌&#xff09;&#xff0c;我希望粉色标牌可以显示在最上层&#xff0c;可偏偏蓝色标牌却将其遮挡住了。于是我对Overlay的层级开始起了兴趣&…

《Golang高性能网络编程:构建低延迟服务器应用》

在本文中&#xff0c;我们将深入探讨Golang高性能网络编程&#xff0c;帮助您构建低延迟服务器应用。我们将介绍Golang的网络编程特性、优化技巧和实际案例&#xff0c;让您更好地理解和应用Golang在网络编程领域的优势。 高性能网络编程简介 什么是Golang高性能网络编程 高性能…

数据结构C语言练习(设计循环队列)

一、循环队列简介 循环队列是一种线性数据结构&#xff0c;基于 FIFO&#xff08;先进先出&#xff09;原则&#xff0c;将队尾连接到队首形成循环。其核心优势是能复用队列之前用过的空间&#xff0c;避免普通队列 “假溢出” 问题。实现时&#xff0c;通常申请 k1 大小的数组…

vscode代码片段的设置与使用

在 Visual Studio Code (VS Code) 中&#xff0c;可以通过自定义**代码片段&#xff08;Snippets&#xff09;**快速插入常用代码模板。以下是详细设置步骤&#xff1a; 步骤 1&#xff1a;打开代码片段设置 按下快捷键 Ctrl Shift P&#xff08;Windows/Linux&#xff09;或…

uniapp -- 列表垂直方向拖拽drag组件

背景 需要在小程序中实现拖拽排序功能,所以就用到了m-drag拖拽组件,在开发的过程中,发现该组件在特殊的场景下会有些问题,并对其进行了拓展。 效果 组件代码 <template><!-- 创建一个垂直滚动视图,类名为m-drag --><scroll

一款非常小的软件,操作起来非常丝滑!

今天我想给大家分享一款超级实用的小软件&#xff0c;它是一款电脑上用的倒计时和关机助手。 关机助手 帮你自动关机 这款关机助手特别小巧&#xff0c;完全不需要安装&#xff0c;文件大小才60KB&#xff0c;比一个小小的文件还小。你只需要把它下载下来&#xff0c;双击打开…

FrameWork基础案例解析(四)

文章目录 单独拉取framework开机与开机动画横屏Android.mk语法单独编译SDKmake 忽略warning单独修改和编译Camera2单独编译Launcher3Android Studio 导入、修改、编译Settings导入 Android Studio 导入、修改、编译Launcher3android 开机默认进入指定Launcher植入自己的apk到系…

通过 C# 提取PDF文档中的图片

当 PDF 文件中包含有价值的图片&#xff0c;如艺术画作、设计素材、报告图表等&#xff0c;提取图片可以将这些图像资源进行单独保存&#xff0c;方便后续在不同的项目中使用&#xff0c;避免每次都要从 PDF 中查找。本文将介绍如何使用C#通过代码从PDF文档中提取图片&#xff…

国标GB28181视频监控平台EasyCVR保驾护航休闲娱乐“九小场所”安全运营

凭借降低人力资源、节约物资成本的优势&#xff0c;在多个场景得到广泛应用。如今&#xff0c;棋牌室、洗浴中心、酒店这类人员频繁流动和密集的场所&#xff0c;已成为安全管理的重点。​ 尽管部分棋牌室已安装了监控设备&#xff0c;但是设备功能单一&#xff0c;只能实现一…

GoLand 2024.3 中文 GO语言开发工具

GoLand 2024.3 中文 GO语言开发工具 文章目录 GoLand 2024.3 中文 GO语言开发工具一、介绍二、效果三、下载 一、介绍 JetBrains GoLand 2024 &#xff0c;是一款GO语言开发工具&#xff0c;全行代码补全&#xff1a;能使用本地运行的上下文感知深度学习模型&#xff0c;可以自…

CentOS 7 强制升级Docker 24.x终极指南(解决MySQL8镜像兼容性问题)

CentOS 7 强制升级Docker 24.x终极指南&#xff08;解决MySQL8镜像兼容性问题&#xff09; 旧版本&#xff1a; 新版本docker&#xff1a; 一、问题背景与方案选型 1.1 典型报错分析 The designated data directory /var/lib/mysql/ is unusable根本原因&#xff1a;旧版…

【区块链安全 | 第十九篇】类型之映射类型

文章目录 映射类型可迭代映射 映射类型 映射类型使用语法 mapping(KeyType KeyName? > ValueType ValueName?)&#xff0c;映射类型的变量声明使用语法 mapping(KeyType KeyName? > ValueType ValueName?) VariableName。 KeyType 可以是任何内置值类型、bytes、st…

Flask与 FastAPI 对比:哪个更适合你的 Web 开发?

在开发 Web 应用时&#xff0c;Python 中有许多流行的 Web 框架可以选择&#xff0c;其中 Flask 和 FastAPI 是两款广受欢迎的框架。它们各有特色&#xff0c;适用于不同的应用场景。本文将从多个角度对比这两个框架&#xff0c;帮助你更好地选择适合的框架来构建你的 Web 应用…

QT 中的元对象系统(五):QMetaObject::invokeMethod的使用和实现原理

目录 1.简介 2.原理概述 3.实现分析 3.1.通过方法名调用方法的实现分析 3.2.通过可调用对象调用方法的实现分析 4.使用场景 5.总结 1.简介 QMetaObject::invokeMethod 是 Qt 框架中的一个静态方法&#xff0c;用于在运行时调用对象的成员函数。这个方法提供了一种动态调…

【无人机】无人机PX4飞控系统高级软件架构

目录 1、概述&#xff08;图解&#xff09; 一、数据存储层&#xff08;Storage&#xff09; 二、外部通信层&#xff08;External Connectivity&#xff09; 三、核心通信枢纽&#xff08;Message Bus&#xff09; 四、硬件驱动层&#xff08;Drivers&#xff09; 五、飞…

【SPP】蓝牙链路控制(LC)在SPP中互操作性深度解析

在蓝牙协议栈的精密分层体系中&#xff0c;其链路控制&#xff08;Link Control, LC&#xff09;层作为基带层的核心组件&#xff0c;承载着物理信道管理、连接建立与维护等关键任务。其互操作性要求直接决定了不同厂商设备能否实现无缝通信。本文将以蓝牙技术规范中的LC互操作…