我在使坐标映射按预期工作时遇到问题。由于某种原因,结果通常是关闭的,除非满足非常特定的条件。
以下是一个示例场景:
对象在树中排序,每个节点都是 100 像素的正方形。映射是从每个节点到第一个节点的父节点完成的。商品按订单排列,例如1 是 2 和 4 的父级,2 是 3 的父级,依此类推...
- Node0 在其父节点中的局部坐标为 0,0,因此从逻辑上讲,映射节点 0 的位置将返回 0,0
- 但是 Node1 不会返回 100, 100,而是返回 200, 200
- 节点 2 和节点 3 的行为有所不同,这次值分别从之前(错误的)节点值正确递增到 300、300 和 400、400
- 节点 4 会返回 300、700,尽管它仅比节点 2 低 100 像素
- 节点5 - 200、1000
- 节点 6 - 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
- Node7 100、700
似乎每个特定级别的新 child 都会使结果出现偏差。知道这里发生了什么吗?
最佳答案
在研究了 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;
}
关于qt - 将坐标映射到项目未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029273/