QT之QML(简单示例)

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

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")
        }
    }

}
相关推荐
皮蛋瘦肉粥_12121 分钟前
pink老师html5+css3day06
前端·css3·html5
wzg20163 小时前
vscode 配置使用pyqt5
开发语言·数据库·qt
华仔啊5 小时前
前端必看!12个JS神级简写技巧,代码效率直接飙升80%,告别加班!
前端·javascript
excel5 小时前
dep.ts 逐行解读
前端·javascript·vue.js
爱上妖精的尾巴5 小时前
5-20 WPS JS宏 every与some数组的[与或]迭代(数组的逻辑判断)
开发语言·前端·javascript·wps·js宏·jsa
excel5 小时前
Vue3 响应式核心源码全解析:Dep、Link 与 track/trigger 完整执行机制详解
前端
Larry_Yanan5 小时前
QML学习笔记(二十四)QML的Keys附加属性
c++·笔记·qt·学习·ui
前端大卫5 小时前
一个关于时区的线上问题
前端·javascript·vue.js
whltaoin5 小时前
中秋赏月互动页面:用前端技术演绎传统节日之美
前端·javascript·html·css3·中秋主题前端
IT派同学6 小时前
TableWiz诞生记:一个被表格合并逼疯的程序员如何自救
前端·vue.js