Domanda

Ho problemi a coordinare la mappatura per funzionare come previsto. Per qualche motivo il risultato è di solito spento, a meno che non venga soddisfatta una condizione molto specifica.

Ecco uno scenario di esempio:

Inserire l'immagine Descrizione qui

Gli oggetti sono ordinati in un albero, con ogni nodo che è quadrato da 100 pixel. La mappatura viene eseguita da ciascun nodo al genitore del primo nodo. Gli articoli vengono pariantati come sono ordinati, ad es. 1 Il genitore di 2 e 4, 2 è genitore di 3 e così via ...

    .
  • Node0 è a coordinate locali 0,0 nel suo genitore, quindi logicamente, mappando la posizione del nodo 0 restituisce 0,0
  • Node1 tuttavia non restituisce 100, 100, invece restituisce 200, 200
  • Node2 e 3 si comportano in modo diverso, questa volta i valori sono incrementati correttamente dal precedente (errato) valore del nodo a 300, 300 e 400, 400
  • Node4 ritorna 300, 700 Anche se è solo 100 pixel al di sotto del nodo 2
  • Node5 - 200, 1000
  • Node6 - 300, 700 - è inferiore al nodo 5 ma mostra un valore Y inferiore Y
  • Node7 - 200, 1400 - 100 pixel in basso del nodo 6 restituisce 700 pixel aggiuntivi Y Value

Sembra che questa mappatura non faccia ciò che presumo che lo faccia, che è produrre una coordinata, assoluta all'oggetto che viene mappato, ad es. L'angolo in alto a sinistra del nodo 0. che dovrebbe produrre i valori previsti:

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

Sembra che ogni nuovo figlio ad un determinato livello si assottiglia il risultato. Qualche idea cosa sta succedendo qui?

È stato utile?

Soluzione

Dopo aver indagato sul metodo mapToItem ho concluso che non è lo strumento giusto per il lavoro, quindi ho scritto il mio.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top