将坐标映射到不按预期工作的项目

时间:2014-01-09 19:23:38

标签: qt mapping qml coordinate

我在使坐标映射按预期工作时遇到问题。由于某种原因,结果通常是关闭的,除非满足非常具体的条件。

以下是一个示例场景:

enter image description here

对象在树中排序,每个节点为100像素的正方形。从每个节点到第一个节点的父节点进行映射。物品按订购顺序排列,例如1是2和4的父,2是3的父,依此类推......

  • Node0位于其父级的本地坐标0,0处,因此逻辑上,映射节点0的位置返回0,0
  • 然而,Node1不返回100,100,而是返回200,200
  • Node2和3的行为不同,这次值正确地从先前(不正确的)节点值增加到300,300和400,400
  • Node4返回300,700,即使它只比节点2低100个像素
  • Node5 - 200,1000
  • 节点6 - 300,700 - 它低于节点5但显示较低的y值
  • 节点7,200-100-比节点6低100个像素返回700个附加像素y值

看起来这个映射没有按照我的假设做,它产生一个坐标,对于被映射到的对象是绝对的,例如,节点0的左上角。应该产生预期值:

  • Node0 0,0
  • Node1 100,100
  • Node2 200,200
  • Node3 300,300
  • Node4 200,400
  • Node5 100,500
  • Node6 200,600
  • Node7 100,700

似乎某个特定级别的每个新孩子都会将结果偏离。知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:1)

在调查mapToItem方法之后,我认为它不适合这项工作,所以我自己写了。

QPointF absolutePosition() {
        QPointF p(0, 0);
        QQuickItem * item = this;
        while (item != Object::_rootUI) { // absolute position relative to _rootUI
            p += item->position();
            item = item->parentItem();
        }
        return p;
    }