在 Qt 中释放和恢复嵌入的 window

Releasing and restoring an embedded window in Qt

在我的 Qt 应用程序中,我需要嵌入本机 window。我首先获取它的 WinId。之后,我通过以下方式创建嵌入式小部件:

QWindow * window = new QWindow::fromWinId(winid);
QWidget * widget = createWindowContainer(window);
QVBoxLayout vl;
ui->frame->setLayout(&vl);
vl.addwidget(widget);
widget->show();

它按照预期的方式完美运行。但是,当我想关闭我的 Qt 应用程序并释放嵌入式 window 并将其恢复到其原始状态时,我遇到了问题。

我目前正在执行以下步骤来发布 window:

QWindow * releasedWindow = new QWindow();
window->setParent(newWin);
newWin->show();

它以某种方式起作用,但不像我想要的那样。如果我这样做,发布的 window 会保留嵌入时的分辨率和几何形状,这与它们本身的不同。它也不响应调整 window 的大小。发布的 window 也失去了它的菜单栏。

我想让它恢复到嵌入前的原始状态。有办法实现吗?

我在 Windows 7.

中使用 Qt 5.5

看来我已经找到了解决办法。只需

即可释放 window
window->setParent(nullptr);
window->setFlags(Qt::Window);

成功了。