2013-06-27 17 views
6

jaki jest właściwy sposób na ponowne załadowanie pliku QML do QQuickView? Używam Qt Quick 2.1 i próbuję napisać prosty program, który ładuje plik qml i wyświetla go. Obecnie robię to, tworząc QQuickView i kiedy chcę przeładować plik qml, usuwam stary i tworzę nowy. Jaki jest właściwy sposób robienia tego? wywoływanie QQuickView :: setSource z nowym plikiem qml (lub zmienionym plikiem qml) nie działało dla mnie.Jak ponownie załadować plik QML do QQuickView

Odpowiedz

10

można użyć następujących (zakładając, że jesteś w podklasie QQuickView):

QUrl tmp = source(); 
setSource(QUrl()); 
engine()->clearComponentCache(); 
setSource(tmp); 
+0

zadziałało. Okazuje się, że jeśli używasz setSource z plikiem, którego już używasz, Qt używa mechanizmu pamięci podręcznej i nie dba o zmiany wprowadzone w pliku qml. jeśli chcesz, aby QQuickView przeładował plik qml, aby wyczyścić pamięć podręczną QQmlEngine. To bardzo pomocne, wielkie dzięki. – otto

+0

Ta funkcja silnika pojawia się z dokumentów, aby wyczyścić * wszystkie * pamięć podręczną w całym interfejsie Qt Quick, co może stanowić problem, jeśli chcesz tylko przeładować pojedynczy element QQuickView. Czy to brzmi dobrze? –

+0

Używam WebView w QML i chcę zniszczyć wszystkie pliki cookie i przechowywane dane. Ale engine() -> clearComponentCache(); setSource (source()); nie pomaga – Robotex

1

Można zrobić to swoje sposoby:

  1. Tworzenie main.qml (nazwa może być cokolwiek) plik, wewnątrz której, będzie faktycznie załadunku i rozładunku inne pliki QML.

  2. Następnie użyj qml loader element do załadowania/wyładowania (odśwież, jeśli możesz) dowolnego innego pliku.

+1

Właściwie Próbowałem to i to nie działa, ponieważ mechanizm cache QQmlEngine za to robi nie dbają o zmiany wprowadzone w pliku qml. Aby rozwiązać ten problem, muszę wyczyścić pamięć podręczną w sposób opisany w poprzedniej odpowiedzi. – otto

Powiązane problemy