Привязка QML к элементу массива

у меня есть width свойство на QML Rectangle который установлен на основе другого прямоугольника с идентификатором mainwindow и одно из свойств массива mainwindow:

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

это работает во время настройки моего прямоугольника; то есть элемент внутри массива numColsPerRow правильно участвует.

однако после установки этого прямоугольника, если я изменю значения внутри numColsPerRow на width этого прямоугольника не имеет никакого эффекта.

тут QML не разрешает привязки свойств к элементам массива?

1 ответов


значения в массиве var JS не излучают и "изменяют" сигнал при вызове:

my_array  [n] = value;

чтобы получить свойство массива, уведомляемое каждому коду, используя его, вы должны использовать этот трюк:

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

таким образом, QML engine будет излучать сигнал, а другие привязки с помощью my_array будут уведомлены и обновлены.

PS: вы не можете использовать ListModel для этого, потому что у вас не будет способа получить определенный элемент в модели с помощью ключа, такого как array или map. Модели предназначены для использования с представлением MVC...