Перезагрузка контента QQuickWindow без восстановления окна
Для файла qml с Item
элемент как корень сцены qml:
Item {
...
}
можно предварительно просмотреть qml
содержимое файла с QQuickView
без окна отдыха - см. соответствующие слегка модифицированные и упрощенные qmlscene
код:
QQmlEngine engine;
QPointer<QQmlComponent> component = new QQmlComponent(&engine);
QQuickWindow *window = nullptr;
auto qxView = new QQuickView(&engine, nullptr);
...
// Call this slot on file update (for example by QFileSystemWatcher signal)
updatePreview()
{
// Recreate Qml Component
engine.clearComponentCache();
component = new QQmlComponent(&engine);
component->loadUrl(url);
QObject *topLevel = component->create();
// Recreate Quick Window
window = qobject_cast<QQuickWindow *>(topLevel);
if (window) {
engine.setIncubationController(window->incubationController());
} else {
QQuickItem *contentItem = qobject_cast<QQuickItem *>(topLevel);
if (contentItem) {
window = qobject_cast<QQuickWindow *>(qxView);
delete qxView->rootObject(); // Clear old root object before setting new one
qxView->setContent(url, component, contentItem);
}
}
}
Для таких qml
структура файла window
становиться nullptr
на Quick Window отдых и исполнение идет в else
путь if
заявление. И там мы используем один QQuickView
пример - qxView
, просто изменяя свой контент без полной перезагрузки и отдыха.
Кстати,
QQuickView::setContent()
без документов, но используется вqmlscene
,
Однако если qml
файл содержит ApplicationWindow
как корневой элемент сцены:
ApplicationWindow {
...
}
Исполнение идет по 1-му варианту отдыха Quick Window:
engine.setIncubationController(window->incubationController());
и новый QQuickWindow
Создан экземпляр, который занимает гораздо больше времени и заставляет нас разрушать и закрывать предыдущий.
Возможно ли это аналогично QQuickView
перезагрузить содержание сцены для QQuickWindow
без полного окна отдыха? Спасибо!