通过QWidget :: createWindowContainer替换嵌入在窗口小部件中的qt窗口

时间:2018-01-03 10:15:57

标签: c++ qt qml qqmlapplicationengine

我通过QWidgetQWidget::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),这非常有效,但我想避免一遍又一遍地删除容器窗口小部件。 我怎样才能做到这一点?

(请注意,代码简单没有指针检查和错误处理,没有必要对此进行评论:))

0 个答案:

没有答案