2013-10-25 9 views
8

że mają właściwość width na QML Rectangle która jest ustawiana na innej prostokąta o identyfikatorze mainwindow i jednej właściwości tablicę mainwindow:QML wiązanie do elementu tablicy

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

działa w tym czasie ustawiony jest mój prostokąt; to znaczy, że element wewnątrz macierzy numColsPerRow jest prawidłowo zaangażowany.

Jednak po ustawieniu tego prostokąta, jeśli zmienię wartości wewnątrz numColsPerRow, width tego prostokąta nie ma żadnego efektu.

Czy QML nie zezwala na powiązania właściwości z elementami tablicy?

+0

Nie sądzę, że można związać się z tablicą w ten sposób. Więcej informacji tutaj: http://qt-project.org/doc/qt-5.0/qtqml/qml-variant.html#storing-arrays-and-objects Powinieneś użyć 'Model' do przechowywania dynamicznych danych, które chcesz elementy do połączenia z. – koopajah

+0

@koopajah ten przykład używa 'variant', jednak jeśli używasz tablic jako' var' zamiast tego, pojęcie, że nie możesz modyfikować elementów tablicy bezpośrednio, nie ma zastosowania. 'variant' jest przestarzały na rzecz zwykłego javascript' var', choć nadal nie rozwiązuje problemu wiążącego. – johnbakers

+0

> Tak, wiem, ale nie znalazłem innej dokumentacji wyjaśniającej, że powiązanie z wartościami tablic nie działa. Naprawdę myślę, że powinieneś użyć 'ListModel' do tego – koopajah

Odpowiedz

12

Wartości w tablicy var JS nie emitują sygnał i „zmienione” podczas rozmowy:

my_array [n] = value; 

W celu uzyskania właściwości tablicy zgłoszonej do każdego kodu użyciem należy użyć tej sztuczki:

var tmp = my_array; 
tmp [n] = value; // you can do multiple changes, and also push/splice items 
my_array = tmp; 

W ten sposób silnik QML będzie emitował sygnał, a inne powiązania za pomocą my_array będą zgłaszane i aktualizowane.

PS: nie można użyć do tego celu ListModel, ponieważ nie będzie można uzyskać określonego elementu w modelu przy użyciu takiej samej tablicy lub mapy. Modele mają być używane z widokiem MVC ...

+0

interesujące, dzięki. – johnbakers

+0

Naprawdę interesujące obejście! działa jak marzenie! Dzięki! –