Pregunta

Estoy teniendo problemas para obtener un mapeo de coordenadas para trabajar según lo previsto. Por alguna razón, el resultado generalmente se apaga, a menos que se cumpla una condición muy específica.

Aquí hay un escenario de ejemplo:

ingrese la descripción de la imagen aquí

Los objetos se ordenan en un árbol, con cada nodo siendo 100 píxeles cuadrados. El mapeo se realiza de cada nodo al padre del primer nodo. Los artículos están paratedados a medida que se ordenan, por ejemplo. 1 es el padre de 2 y 4, 2 es el padre de 3 y así sucesivamente ...

  • Node0 está en coordenadas locales 0,0 en su padre, de manera lógica, mapeando la posición del nodo 0 devuelve 0,0
  • node1 Sin embargo, no devuelve 100, 100, en su lugar, devuelve 200, 200
  • Node2 y 3 se comportan de manera diferente, esta vez los valores se incrementan correctamente del valor del nodo anterior (incorrecto) a 300, 300 y 400, 400, respectivamente,
  • Node4 devuelve 300, 700 a pesar de que es solo 100 píxeles debajo del nodo 2
  • nodo5 - 200, 1000
  • Node6 - 300, 700 - es más bajo que el nodo 5, pero muestra un valor inferior de Y
  • Node7 - 200, 1400 - 100 Pixel Lo más bajo que el nodo 6 Devuelve 700 píxeles adicionales y valor

Parece que este mapeo no hace lo que asumo que sí, lo que se produce una coordenada, absoluta al objeto que se está asignando a, por ejemplo, por ejemplo. La esquina superior izquierda del nodo 0. Que debe producir los valores esperados:

  • node0 0, 0
  • node1 100, 100
  • Node2 200, 200
  • nodo3 300, 300
  • Node4 200, 400
  • nodo5 100, 500
  • Node6 200, 600
  • nodo7 100, 700

Parece que cada nuevo niño en un nivel dado se desvía el resultado. ¿Alguna idea de lo que está pasando aquí?

¿Fue útil?

Solución

Después de investigar el método mapToItem, concluyé que no es la herramienta adecuada para el trabajo, así que escribí la mía.

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;
    }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top