Qt Repeater ListModel i odświeżanie
-
Witam, piszę ponieważ doprowadził mnie już QML do nieco złego nastroju (delikatnie powiedziane). Próbuję zrobić Repeatera, który jako model przyjmuje obiekt ListModel. I wszystko do tej pory gra i buczy. Otrzymuję od C++ sygnały o aktualnym stanie pewnych zmiennych (niestety ze względu na poufność projektu nie mogę zagłębić się w szczegóły) - reaguję na nie przy użyciu funkcji JavaScript i z jej poziomu chciałbym zaktualizować dane w jednym z pól w ListModel - przy użyciu setProperty. I tutaj pojawia się problem, co z tego, że ja sobie zmienię jakieś dane w ListModel przy użyciu standardowych funkcji setProperty lub set - mogę sobie zrobić nawet roszadę, a tak czy siak QML zareaguje na to tak:
<zero reakcji>
Proszę, powiedzcie mi czy da się i jak (jakimi sygnałami / funkcjami) odświeżyć widok Repeater'a bez schodzenia do C++ (tak się składa, że zejście do C++ będzie oznaczało utworzenie w bezsensowny sposób nowego pliku nagłówkowego i źródłowego dla listy zawsze zawierającej 3 elementy). Jeśli się nie da to będę kombinował dalej.
Z góry dzięki i przepraszam za ton mojej wypowiedzi, ale QML już po raz n-ty wyprowadza mnie z równowagi.
-
Sprawa jest prosta: Repeater tworzy obiekty raz, po czym o nich "zapomina". Myśl o nim raczej jak o makrze, które jest odalane na samym początku (taki "preprocessing"), a potem już nie występuje w gotowym kodzie.
Jeśli chcesz list, które można odświeżać (pamiętając o warunkach "wymienionych":http://qt-project.org/doc/qt-5/qtquick-modelviewsdata-modelview.html#c-data-models w dokumentacji), musisz skorzystać z ListView, GridView itd. No albo wrzucić Repeater do Loadera i przeładowywać od nowa po każdej aktualizacji - ale to chyba trochę przesada.
-
Dzięki za pomoc, o czymś takim jak Loader nie słyszałem jeszcze, ale to bardzo miło, że mi o tym piszesz, bo może rozwiązać mój problem.