Каков правильный способ перезагрузки qml-файла в QQuickView? Я использую Qt Quick 2.1 и пытаюсь написать простую программу, которая загружает qml-файл и отображает его. В настоящее время я делаю это, создавая QQuickView, и когда я хочу перезагрузить qml-файл, я удаляю старый и создаю новый. Каков правильный способ сделать это? вызов QQuickView :: setSource с новым qml-файлом (или измененным qml-файлом) не сработал для меня.Как перезагрузить qml-файл в QQuickView
ответ
Вы можете использовать следующее (если вы находитесь в подклассе QQuickView
):
QUrl tmp = source();
setSource(QUrl());
engine()->clearComponentCache();
setSource(tmp);
Вы можете сделать это его пути:
Создать main.qml (имя может быть что-нибудь) файл, внутри которого, вы будете на самом деле загрузки и выгрузки других QML файлов.
Затем используйте qml loader element для загрузки/выгрузки (обновите, если можете) любой другой файл.
На самом деле я попробовал это, и это не сработало, потому что механизм кэш-памяти QQmlEngine в это Безразлично Не заботьтесь об изменениях, внесенных мной в qml-файл. Чтобы решить эту проблему, мне нужно очистить кеш, как описано в предыдущем ответе. – otto
Это сработало. Таким образом, получается, что если вы используете setSource с файлом, который вы уже используете раньше, Qt использует его механизм кэширования и не заботится об изменениях, внесенных вами в qml-файл. если вы хотите, чтобы QQuickView перезагрузил qml-файл, вам нужно очистить кеш QQmlEngine. Это очень полезно, спасибо большое. – otto
Эта функция движка появляется из документов, чтобы очистить * все * кэш во всем интерфейсе Qt Quick, что может быть проблемой, если вы хотите только перезагрузить отдельный элемент QQuickView. Правильно ли это звучит? –
Я использую WebView в QML и хочу уничтожить все файлы cookie и сохраненные данные. Но engine() -> clearComponentCache(); setSource (source()); не помогает – Robotex