首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是QQuickItem::mapToItem返回类型?

什么是QQuickItem::mapToItem返回类型?
EN

Stack Overflow用户
提问于 2014-01-08 16:24:40
回答 1查看 4.6K关注 0票数 4

下面的应用程序输出从一个QQuickItem映射到另一个的坐标。根据医生的说法:

object mapToItem(Item item, real x, real y) 将项目坐标系中的点(x,y,宽度,高度)映射到项的坐标系中,并返回具有x和y(以及可选宽度和高度)属性的对象。

我希望输出的内容如下所示:

0%0 1 1 2 2

但我明白:

代码语言:javascript
复制
QPointF(9, 6)   100  
QPointF(9, 5)   100  
QPointF(8, 5)   100  

为什么mapped.x的类型是QPointF?我以为它是一个浮点值。什么是实际的mapped类型?

代码语言:javascript
复制
import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Window 2.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    width: 640
    height: 480

    Rectangle {
        anchors.fill: parent
        id: r0
        color: "green"
        Rectangle {
            x: 50; y:100; width: 100; height: 100;
            id: r
            color: "yellow"
            MouseArea {
                id: mousearea
                anchors.fill: parent
                hoverEnabled: true
                onPositionChanged: {
                    var mouseP = Qt.point(mouse.x, mouse.y);
                    var mapped = r.mapToItem(r0, mouseP);
                    console.log(mapped.x, ' ', mapped.y);
                }
            }
        }
    }
}

UPDATE1: QQuickItem有两个args的mapToItem项目有三个args的mapToItem。在上面的代码中,哪一个被调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-08 21:51:55

在您的例子中,mapToItem需要3个参数。你不需要先创造一个点。

代码语言:javascript
复制
onPositionChanged: {
    var mapped = r.mapToItem(r0, mouse.x, mouse.y);
    console.log(mapped.x, ' ', mapped.y);
}

背景说明:这似乎是一个bug,我只是已报告

您的代码调用QQuickItem::mapToItem()有两个原因。首先,QQuickItem::mapToItem(const QQuickItem *item, const QPointF &point) const;是不可调用的,即它不会从C++公开到QML。其次,QQuickItem::mapToItem(const QQuickItem *item, const QPointF &point) const;直接返回一个QPointF,其内部属性称为xpyp,而不是xy (可以使用调试器观察到这一点)。

QQuickItem::mapToItem()中,xy被C++强制为qreal类型,这是C++ double的别名。即使if (v = (*args)[1])->asDouble()完全抓狂,x也一定是

  • 普通双值
  • 非数
  • +∞
  • −∞
  • -0
  • +0。

在您的例子中,应该是NaNy = 0,因为没有设置参数3。这样就创建了一个点(NaN, 0)。从那时起,其余的计算就没有任何意义了,但是错误处理缺失了。

有一个新的JavaScript引擎从Qt5.2开始使用。在5.1和之前,使用了V8,它向QML返回一个NaN而不是一个QPointF

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21001124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档