0

QWidgetvia内に埋め込まれた 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)、これは完全に機能していましたが、コンテナ ウィジェットを何度も削除することは避けたいと思います。どうすればこれを達成できますか?

(コードを簡単にするために、ポインターのチェックもエラー処理も行わないことに注意してください。それについてコメントする必要はありません :) )

4

0 に答える 0