QWidget
via内に埋め込まれた QML ウィンドウがあります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
)、これは完全に機能していましたが、コンテナ ウィジェットを何度も削除することは避けたいと思います。どうすればこれを達成できますか?
(コードを簡単にするために、ポインターのチェックもエラー処理も行わないことに注意してください。それについてコメントする必要はありません :) )