В моем приложении 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();
Это работает таким образом, но не так, как я хочу. Если я сделаю это, то выпущенное окно сохранит разрешение и геометрию, которые были у него во время встраивания, что отличается от того, что было изначально. Он также не реагирует на изменение размера окна. Вышедшее окно также теряет строку меню.
Я хочу, чтобы он был восстановлен в исходное состояние, которое было до встраивания. Есть ли способ достичь этого?
Я использую Qt 5.5 с Windows 7.
Кажется, я уже нашел решение. Отпустите окно просто
window->setParent(nullptr);
window->setFlags(Qt::Window);
Делает трюк.
Других решений пока нет …