2013-10-25 13 views
8

Ho una struttura width su un QML Rectangle che viene impostato secondo un altro rettangolo con un id di mainwindow e una delle proprietà di matrice di mainwindow:QML legame a un elemento array

width: mainwindow.width/mainwindow.numColsPerRow[positionRow]

questo funziona al momento il mio rettangolo è impostato; ovvero, l'elemento all'interno dell'array numColsPerRow è coinvolto correttamente.

Tuttavia, dopo aver impostato questo rettangolo, se cambio i valori all'interno di numColsPerRow, il width di questo rettangolo non ha alcun effetto.

QML non consente i collegamenti di proprietà agli elementi di matrice?

+0

Non credo che si possa associare a un array in questo modo. Maggiori informazioni qui: http://qt-project.org/doc/qt-5.0/qtqml/qml-variant.html#storing-arrays-and-objects Dovresti usare un 'Modello' per memorizzare i dati dinamici che vuoi elementi da associare a. – koopajah

+0

@koopajah quell'esempio sta usando 'variant', tuttavia se si usano gli array come' var', la nozione che non è possibile modificare direttamente gli elementi dell'array non si applica. 'variant' è obsoleto a favore di javascript' var', anche se questo non risolve il problema vincolante. – johnbakers

+0

> Sì, lo so, ma non ho trovato un'altra documentazione che spieghi che il binding ai valori degli array non ha funzionato. Penso davvero che dovresti usare un 'ListModel' per questo – koopajah

risposta

12

valori in un array var JS non emettono il segnale e 'cambiato' quando si chiama:

my_array [n] = value; 

Al fine di ottenere la proprietà di matrice notificata ad ogni codice di usarlo è necessario utilizzare questo trucco:

In questo modo, il motore QML emetterà il segnale e altri binding utilizzando my_array verranno notificati e aggiornati.

PS: non è possibile utilizzare un ListModel per questo, perché non si avrà un modo per ottenere un particolare oggetto nel modello usando una chiave come array o map do. I modelli sono pensati per essere utilizzati con una vista MVC ...

+0

interessante, grazie. – johnbakers

+0

Soluzione davvero interessante! funziona come un fascino! Grazie! –

Problemi correlati