Заменить встраиваемое окно qt в виджет через QWidget::createWindowContainer
У меня есть окно QML, встроенное в QWidget
с помощью QWidget::createWindowContainer()
,
Чтобы обеспечить некоторые возможности перезагрузки без скрытия окна, я хотел бы иметь возможность заменить базовое (встроенное) окно qml, не разрушая и не воссоздавая родительский виджет.
То, что я пробовал до сих пор,
QQmlApplicationEngine engine;
// First time
// Load the qml file
engine.load("main.qml");
// Get the window
QWindow* window = static_cast<QWindow*>(engine.rootObjects().last());
// Create the window container
QWidget* container = QWidget::createWindowContainer(qmlWindow);
// -> This works perfectly well
// Other times
// Get the old window
QWindow* oldWindow = static_cast<QWindow*>(engine.rootObjects().last());
// And its container
QWindow* container = oldWindow->parent();
// Close the old window
lOldWindow->close();
// Load the qml
engine.load("main.qml");
// Get the new qml window
QWindow* window = static_cast<QWindow*>(engine.rootObjects().last());
// Reparent it to the old window's container
lWindow->setParent(lContainer);
// -> The newly created window does not show up
Я использовал, чтобы полностью удалить окно контейнера и воссоздать его (с createWindowContainer
) и это работало на отлично, но я хотел бы избегать удаления виджета контейнера снова и снова. Как мне этого добиться?
(Обратите внимание, что для простоты кода нет ни проверки указателей, ни обработки ошибок, нет необходимости комментировать это:))