gpt4 book ai didi

javascript - QML 鼠标在 MouseArea 中的绝对位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:01 27 4
gpt4 key购买 nike

如何从鼠标区域获取鼠标的绝对位置?我需要让它显示正确位置的弹出窗口

Item {
Menu {
id: menu
MenuItem {
onTriggered: {
// Need Mouse absolute position
}
}
}
MouseArea {
id: mouseArea
anchors.fill: parent
onClicked: {
menu.popup()
}
}

最佳答案

简答

    onClicked: {
var positionInPopup = mapToItem(popup, mouse.x, mouse.y)
}

更长的答案

就像 indalive 暗示的那样,映射坐标的首选方法是使用 mapToItem ,可用于任何项目。它将坐标(和大小)从当前 Item 坐标系(如果没有另外指定)转换到另一个 Item 坐标系。和 mapFromItem对方自然而然地做相反的事情。

从 Qt 5.7 开始,您还有 mapToGlobal ,这将为您提供系统/屏幕引用中的坐标。

MouseArea {

// ...

onPositionChanged: {
var positionInRoot = mapToItem(root, mouse.x, mouse.y)
var positionInWindow = mapToItem(window.contentItem, mouse.x, mouse.y)
var globalPosition = mapToGlobal(mouse.x, mouse.y)

console.log("For root: " + positionInRoot )
console.log("For window: " + positionInWindow)
console.log("For system: " + globalPosition)
}
}

鉴于上面的例子,......

  • 你的 MouseArea 靠近 root,离你的 Window 左上角有点远
  • 窗口本身距屏幕最左侧 1000px+

...你会看到:

For root: QPointF(10, 0)

For window: QPointF(150, 100)

For system: QPointF(1230, 120)

注意 Window 类型

当与Window(QML 类型)进行转换时,您需要使用其contentItem 属性,因为 mapTo/From 仅适用于Items.

关于javascript - QML 鼠标在 MouseArea 中的绝对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19392163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com