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

这是一个示例场景:

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 个像素
  • 节点5 - 200、1000
  • Node6 - 300, 700 - 它低于节点 5,但显示较低的 y 值
  • 节点 7 - 200、1400 - 比节点 6 低 100 像素返回 700 个额外像素 y 值

看起来这个映射并没有像我想象的那样,它会产生一个相对于被映射到的对象的绝对坐标,例如节点 0 的左上角。这应该产生预期值:

  • 节点0 0, 0
  • 节点1 100, 100
  • 节点2 200, 200
  • 节点3 300, 300
  • 节点4 200、400
  • 节点5 100、500
  • 节点6 200、600
  • 节点7 100、700

似乎每个特定水平的新孩子都会使结果产生偏差。知道这是怎么回事吗?

有帮助吗?

解决方案

经过调查后 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;
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top