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
),这工作得很好,但我想避免一遍又一遍地删除容器小部件。我怎样才能做到这一点?
(请注意,为了代码的简单性,没有指针检查或错误处理,无需对此发表评论:))