2013-06-27 5 views
6

Каков правильный способ перезагрузки qml-файла в QQuickView? Я использую Qt Quick 2.1 и пытаюсь написать простую программу, которая загружает qml-файл и отображает его. В настоящее время я делаю это, создавая QQuickView, и когда я хочу перезагрузить qml-файл, я удаляю старый и создаю новый. Каков правильный способ сделать это? вызов QQuickView :: setSource с новым qml-файлом (или измененным qml-файлом) не сработал для меня.Как перезагрузить qml-файл в QQuickView

ответ

10

Вы можете использовать следующее (если вы находитесь в подклассе QQuickView):

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

Это сработало. Таким образом, получается, что если вы используете setSource с файлом, который вы уже используете раньше, Qt использует его механизм кэширования и не заботится об изменениях, внесенных вами в qml-файл. если вы хотите, чтобы QQuickView перезагрузил qml-файл, вам нужно очистить кеш QQmlEngine. Это очень полезно, спасибо большое. – otto

+0

Эта функция движка появляется из документов, чтобы очистить * все * кэш во всем интерфейсе Qt Quick, что может быть проблемой, если вы хотите только перезагрузить отдельный элемент QQuickView. Правильно ли это звучит? –

+0

Я использую WebView в QML и хочу уничтожить все файлы cookie и сохраненные данные. Но engine() -> clearComponentCache(); setSource (source()); не помогает – Robotex

1

Вы можете сделать это его пути:

  1. Создать main.qml (имя может быть что-нибудь) файл, внутри которого, вы будете на самом деле загрузки и выгрузки других QML файлов.

  2. Затем используйте qml loader element для загрузки/выгрузки (обновите, если можете) любой другой файл.

+1

На самом деле я попробовал это, и это не сработало, потому что механизм кэш-памяти QQmlEngine в это Безразлично Не заботьтесь об изменениях, внесенных мной в qml-файл. Чтобы решить эту проблему, мне нужно очистить кеш, как описано в предыдущем ответе. – otto