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;
    
            }
    
        }
    
    }
    

      

  • 相关阅读:
    nyoj 95 众数问题(set)
    nyoj 93 汉诺塔(三)(stack)
    hdu 1010 Tempter of the Bone
    nyoj 55 懒省事的小明(priority_queue优先队列)
    nyoj 31 5个数求最值
    poj 1256 Anagram
    next_permutation函数
    nyoj 19 擅长排列的小明(深搜,next_permutation)
    nyoj 8 一种排序(用vector,sort,不用set)
    nyoj 5 Binary String Matching(string)
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/10168393.html
Copyright © 2011-2022 走看看