我通过QWidget
在QWidget::createWindowContainer()
内嵌入了一个QML窗口。
为了在不隐藏窗口的情况下提供一些重新加载功能,我希望能够替换底层(嵌入)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
),这非常有效,但我想避免一遍又一遍地删除容器窗口小部件。
我怎样才能做到这一点?
(请注意,代码简单没有指针检查和错误处理,没有必要对此进行评论:))