zoukankan      html  css  js  c++  java
  • qml : qml控件自适应;

    import QtQuick 2.4
    
     
    
    Item {
    
        property var targetItem: parent
    
        property bool fixedAspectRatio: true // Else zoom from width and height
    
        property bool accordingToX: true // Else according to center
    
     
    
        property var targetItemGeometry
    
        property var childrenItemGeometry
    
     
    
        property bool isBegin: false
    
     
    
        function begin() {
    
            targetItemGeometry = new Object;
    
            targetItemGeometry["width"] = targetItem.width;
    
            targetItemGeometry["height"] = targetItem.height;
    
     
    
            var children = targetItem.children;
    
            var data = new Array;
    
            for(var index = 1; index < children.length; index++)
    
            {
    
                var currentItem = children[index];
    
                var buf = new Object;
    
     
    
                buf["item"] = currentItem;
    
                buf["x"] = currentItem.x;
    
                buf["y"] = currentItem.y;
    
                buf["centerX"] = currentItem.x + (currentItem.width / 2);
    
                buf["centerY"] = currentItem.y + (currentItem.height / 2);
    
                buf["width"] = currentItem.width;
    
                buf["height"] = currentItem.height;
    
     
    
                data.push(buf);
    
            }
    
     
    
            childrenItemGeometry = data;
    
            isBegin = true;
    
        }
    
     
    
        function resize() {
    
            if(isBegin)
    
            {
    
                var horizontalRatio, verticalRatio;
    
     
    
                horizontalRatio = targetItem.width / targetItemGeometry["width"];
    
                verticalRatio = targetItem.height / targetItemGeometry["height"];
    
     
    
                for(var index = 0; index < childrenItemGeometry.length; index++)
    
                {
    
                    if(fixedAspectRatio)
    
                    {
    
                        if(horizontalRatio > verticalRatio)
    
                        {
    
                            childrenItemGeometry[index]["item"].width  = childrenItemGeometry[index]["width"] * verticalRatio;
    
                            childrenItemGeometry[index]["item"].height = childrenItemGeometry[index]["height"] * verticalRatio;
    
                        }
    
                        else
    
                        {
    
                            childrenItemGeometry[index]["item"].width  = childrenItemGeometry[index]["width"] * horizontalRatio;
    
                            childrenItemGeometry[index]["item"].height = childrenItemGeometry[index]["height"] * horizontalRatio;
    
                        }
    
                    }
    
                    else
    
                    {
    
                        childrenItemGeometry[index]["item"].width  = childrenItemGeometry[index]["width"] * horizontalRatio;
    
                        childrenItemGeometry[index]["item"].height = childrenItemGeometry[index]["height"] * verticalRatio;
    
                    }
    
     
    
                    if(accordingToX)
    
                    {
    
                        childrenItemGeometry[index]["item"].x = childrenItemGeometry[index]["x"] * horizontalRatio;
    
                        childrenItemGeometry[index]["item"].y = childrenItemGeometry[index]["y"] * verticalRatio;
    
                    }
    
                    else
    
                    {
    
                        childrenItemGeometry[index]["item"].x = childrenItemGeometry[index]["centerX"] * horizontalRatio - (childrenItemGeometry[index]["item"].width / 2);
    
                        childrenItemGeometry[index]["item"].y = childrenItemGeometry[index]["centerY"] * verticalRatio - (childrenItemGeometry[index]["item"].height / 2);
    
                    }
    
                }
    
            }
    
        }
    
     
    
        Component.onCompleted: {
    
            begin();
    
        }
    
     
    
        Component {
    
            id: connections
    
     
    
            Connections {
    
                target: targetItem
    
     
    
                onWidthChanged: {
    
                    resize();
    
                }
    
                onHeightChanged:
    
                {
    
                    resize();
    
                }
    
            }
    
        }
    
     
    
        Loader {
    
            Component.onCompleted: {
    
                sourceComponent = connections;
    
            }
    
        }
    
    }
    

      

  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/10168393.html
Copyright © 2011-2022 走看看