美文网首页Qt学习Qt QML 杂记Qt
QML中mapToItem和mapFromItem的区别

QML中mapToItem和mapFromItem的区别

作者: 赵者也 | 来源:发表于2016-12-15 11:26 被阅读103次

mapFromItem##

object mapFromItem(Item item, real x, real y)###

将参数item(A)的坐标系统的坐标点(x,y)映射到调用该方法的对象(B)坐标系统中,并返回一个映射之后的坐标(point)。此时,参数x,y是指的A对象上的坐标点。如果item参数是null值,坐标点的值就是从QML视图的根元素的坐标系统映射出来的。

object mapFromItem(Item item, real x, real y, real width, real height)###

将参数item(A)的坐标系统的区域(x,y,width,height)映射到调用该方法的对象(B)的坐标系统中,并返回一个映射之后的区域(rect)。此时,参数x,y,width,height是指来自的A对象的区域。如果item参数是null值,坐标点的值就是从QML视图的根元素的坐标系统映射出来的。

mapToItem##

object mapToItem(Item item, real x, real y)###

将调用该方法的对象(C)的坐标点(x,y),映射到参数item(D)的坐标系统中,并返回一个映射之后的坐标(point)。此时,参数x,y是指的C对象上的坐标点。如果item参数是null值,坐标点的值就是从QML视图的根元素的坐标系统映射出来的。

object mapToItem(Item item, real x, real y, real width, real height)###

将调用该方法的对象(C)的区域(x,y,width,height),映射到参数item(D)的坐标系统中,并返回一个映射之后的区域(rect)。此时,参数x,y,width,height是指来自的C对象的区域。如果item参数是null值,坐标点的值就是从QML视图的根元素的坐标系统映射出来的。

再看一个使用实例:

import QtQuick 2.3
import QtQuick.Window 2.2

Window {
    visible: true
    x: 100
    y: 100
    width: 640
    height: 480
    title: qsTr("Test item maps")

    Rectangle {
        id: container

        anchors.fill: parent
        anchors.margins: 20

        border.color: "gray"

        Rectangle {
            id: content
            implicitWidth: 120
            implicitHeight: 120
            color: "#666"

            Text {
                id: posValue
                anchors.centerIn: parent
            }

            MouseArea {
                anchors.fill: parent
                drag.target: content
                drag.minimumX: 0
                drag.maximumX: container.width - content.width
                drag.minimumY: 0
                drag.maximumY: container.height - content.height

                function updateText(){
                    var t,m

                    m = container.mapFromItem(content, 0, 0, 12, 34);

                    t = m.x + "," + m.y + "," + m.width + "," + m.height + "\n"

                    m = container.mapFromItem(null, 0, 0, 12, 34);

                    t += m.x + "," + m.y + "," + m.width + "," + m.height + "\n"

                    m = content.mapToItem(container, 0, 0, 12, 34);

                    t += m.x + "," + m.y + "," + m.width + "," + m.height + "\n"

                    m = content.mapToItem(null, 0, 0, 12, 34);

                    t += m.x + "," + m.y + "," + m.width + "," + m.height

                    posValue.text = t

                }

                onPositionChanged: {
                    updateText()
                }

                Component.onCompleted: updateText()
            }
        }
    }
}
起始位置的坐标 移动之后的坐标 结束位置的坐标

从代码以及运行效果,我们可以大概的了解这两个function的使用场景和使用之后的效果。

以上是个人对这两个function的理解,如有不当之处欢迎留言指正。

相关文章

  • QML中mapToItem和mapFromItem的区别

    mapFromItem## object mapFromItem(Item item, real x, real ...

  • QWidget 调用 QML 插件中的对象

    目标 为实现从QML字符串中创建QML对象,并显示在基于QWidget项目工程中,且这个QML对象所属类型来自QM...

  • C++调用QML代码

    C++调用QML实际上就是通过 QML 对象的指针去访问QML对象的属性和方法 只要获取到QML对象的指针,接下来...

  • Qml调用插件

    创建一个带Qml窗体的动态库, 接口文件如下: 通过调用接口来加载和显示qml文件 调用方加载和调用插件中的接口函...

  • QML中文件的加载

    在这里小小总结一下QML文件中如何加载QML文件与JavaScript文件。 1、QML文件中加载JavaScri...

  • Qt/QML 插件系统

    Qt/QML 插件系统 本文将简要介绍一下 Qt 和 QML 的插件系统,并用几个简单的示例介绍 QML 的几种插...

  • QmlLoader

    qml中可以使用Loader来加载并显示qml文件 调用 就可以加载对应的qml文件并显示了 需要完整代码请访问Q...

  • Record one usage of 'qml signal'

    ArMap.qml ArCanvas.qml

  • QML Loader使用

    能在qml组件需要的时候再创建,即延迟创建QML的时间,类似ios懒加载 main.qml page1.qml p...

  • QML Canvas基础概念

    阅读本文大概需要3分钟 QML中绘图方式有多种,Canvas(QML)是一种,当然使用QQuickPaintedI...

网友评论

    本文标题:QML中mapToItem和mapFromItem的区别

    本文链接:https://www.haomeiwen.com/subject/qgowmttx.html