QML - tracking global position of a component

前端 未结 5 827
灰色年华
灰色年华 2020-12-09 11:19

I would like to track a global position of an object (or relative to one of it\'s ancestors) and bind it to some other item\'s position.

I was thinking about using <

5条回答
  •  情深已故
    2020-12-09 11:32

    Tracking certain Item's global positions seems like an important problem if developing some complex graphics interaction. I came up with a relatively simple & graceful solution. Here is my core codes:

    Item{
        id: globalRoot
        signal globalPositionChanged(Item item, real newX, real newY);
    
        function tracking(item){
            var obj = item;
            var objN;
            function onGlobalXYChanged(){
                var pt = mapFromItem(item, item.x, item.y);
                globalRoot.globalPositionChanged(item, pt.x, pt.y);
            }
            do{
                objN = obj.objectName;
                obj.xChanged.connect(onGlobalXYChanged);
                obj.yChanged.connect(onGlobalXYChanged);
                obj = obj.parent;
            }while(objN !== "furthestAncestorObjectName");
        }
    }
    

    The core idea is: what essentially makes an Item's global position change? It maybe itself, its parent or its parent's parent etc. So make a traverse back to its furthest parent and connect each of its ancestor's x/y change signal to a function, within which we get the item's global position and broadcast outside.

提交回复
热议问题