Можно ли получить любой дочерний компонент под mouseX, mouseY в QML - PullRequest
0 голосов
/ 31 августа 2018

Мне было интересно, если Window, например, имеет несколько дочерних элементов. Можно ли будет узнать, какой ребенок находится под текущими значениями MouseArea х и у?

1 Ответ

0 голосов
/ 31 августа 2018

Стратегия для решения этой проблемы состоит в том, чтобы преобразовать координату, полученную мышью, в глобальные координаты, используя метод 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)
        }
    }

     ...

}
...