从全屏幕将QWindow带回父QWidget

时间:2017-09-01 15:20:25

标签: qt

我有一个子类QWindow的对象。我将它添加到QMainWindow的布局中,将其包装到QWidget容器中,如下所示:

  myWinContainer= QWidget::createWindowContainer(myWindow,this);
  vbox->addWidget(myWinContainer);
  myWinContainer->setFixedSize(640,360);

然后是全屏模式。我试图直接在myWindow(QWindow)上设置屏幕模式:

 myWindow->setParent(nullptr);
 myWindow->showFullScreen();

窗户全屏显示。但是当我从全屏退出时,我无法将其重新置于其小部件中。

 myWindow->setWindowState(Qt::WindowNoState);
 myWindow->setParent(p);//where p is cached pointer to parent: myWindow->parent()
 myWindow->showNormal();

窗口与主窗口保持分离。

然后我尝试通过myWindow的父窗口小部件(myWinContainer)进行全屏显示。在这种情况下,每次我将myWinContainer插回其父级时:

  vbox->insertWidget(0,myWinContainer);

布局对象,它会因内部错误而崩溃。

1 个答案:

答案 0 :(得分:0)

也许您需要重新创建窗口容器:

class Foo : public QWidget {
  QWidget * m_container = {};
  QWindow m_window;
  QVBoxLayout m_vBox;
  // ...
};

void Foo::contain() {
  // invoke each time the window is shown not-full-scale
  delete m_container; // removes from the layout, too
  m_container = QWidget::createWindowContainer(&m_window, this);
  m_container->setFixedSize(640,360);
  m_vBox->addWidget(myWinContainer);
}