Стратегия для решения этой проблемы состоит в том, чтобы преобразовать координату, полученную мышью, в глобальные координаты, используя метод mapToGlobal()
, затем использовать метод mapFromGlobal()
, чтобы преобразовать эти глобальные координаты в локальные для каждого элемента, и, наконец, использовать contains()
, чтобы проверить, находится ли точка внутри предмета. Чтобы получить детей, вы должны использовать метод children()
.
Window {
id: window
visible: true
width: 640
height: 480
function itemsFromGlobalPosition(root, globalPos){
var items = []
for(var i in root.children){
var children = root.children[i]
var localpos = children.mapFromGlobal(globalPos.x, globalPos.y)
if(children.contains(localpos)){
items.push(children)
}
items = items.concat(itemsFromGlobalPosition(children, globalPos))
}
return items;
}
MouseArea{
id: ma
anchors.fill: parent
onClicked: {
var results = itemsFromGlobalPosition(window.contentItem, ma.mapToGlobal(mouseX, mouseY))
console.log("results: ", results)
}
}
...
}