在我的Qt应用程序中,我需要嵌入一个原生窗口。我从获得它的WinId开始。之后,我按以下方式创建嵌入式窗口小部件:
QWindow * window = new QWindow::fromWinId(winid);
QWidget * widget = createWindowContainer(window);
QVBoxLayout vl;
ui->frame->setLayout(&vl);
vl.addwidget(widget);
widget->show();
它的工作方式非常完美。但是,当我想关闭我的Qt应用程序并释放并将嵌入式窗口恢复到其原始状态时,我遇到了问题。
我目前正在执行以下步骤来释放窗口:
QWindow * releasedWindow = new QWindow();
window->setParent(newWin);
newWin->show();
它在某种程度上起作用,但不像我希望的那样。如果我这样做,释放的窗口将保留嵌入时的分辨率和几何形状,这与它们本身不同。它也没有响应调整窗口大小。释放的窗口也会丢失其菜单栏。
我希望它能够恢复到嵌入之前的原始状态。有没有办法实现这个目标?
我在Windows 7中使用Qt 5.5。
答案 0 :(得分:1)
似乎我已经找到了解决方案。只需
即可释放窗口window->setParent(nullptr);
window->setFlags(Qt::Window);
诀窍。