qml : qml控件自适应;

Posted yinwei-space

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

        }

    }

}

  

以上是关于qml : qml控件自适应;的主要内容,如果未能解决你的问题,请参考以下文章

qml: 自定义按钮-- 仿QML自带控件;

Qt Quick——QML基础:自定义控件

提问qml中的listview中的item怎么自适应高度

QtQuick/Qml自定义控件(1)-ToolTip

QtQuick/Qml自定义控件(3)-自定义对话框

转载 qml: MouseArea重叠问题;