La mappatura delle coordinate all'articolo non funziona come previsto
-
21-12-2019 - |
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:
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?
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;
}
.