2015-12-14 5 views
1

В моем приложении Qt мне нужно встроить собственное окно. Я начинаю с получения WinId. После этого я создаю встроенный виджет следующим образом:Освобождение и восстановление встроенного окна в Qt

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.

+0

Написал ответ ниже. – blomm444

ответ

1

кажется, что я нашел решение уже. Освобождение окна просто

window->setParent(nullptr); 
window->setFlags(Qt::Window); 

Есть трюк.

Смежные вопросы