qt - 将坐标映射到项目未按预期工作

标签 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
  • 节点 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/

相关文章:

python - pandas 根据另一列选定值创建新列

qt - 在QML ListView中的元素之间需要页边距

c++ - 无法找出将信号从 qml 绑定(bind)到 cpp 插槽的正确方法

Qt- 为多个标签设置样式表

c++ - Qt:更改 html 标签的颜色不起作用

java - @AttributeOverride - 继承一些属性作为默认值

c++ - 本地版 Google Maps API

qt - QML 字体渲染不正确 - 缺少细节

c++ - 如何使用 Qt 将颜色应用于 Excel 单元格?

c++ - Qt : Create a Stack of image