Qt 如何全屏显示QGLWidget?

Qt 如何全屏显示QGLWidget?,qt,qt4,fullscreen,qglwidget,Qt,Qt4,Fullscreen,Qglwidget,我有一个QGLWidget作为应用程序UI的一部分。它不是一个中心小部件,它周围还有很多其他小部件。我想在用户单击按钮时全屏显示它。类似于youtube视频flash播放器上的功能 我尝试过使用showFullScreen,但没有效果 我读过很多书,但他们建议使用全屏显示 Qt文档说明,使用showFullScreen小部件必须是一个独立的窗口。所以我想应该有一些技巧 该功能仅适用于windows。从Qt文档中: 窗口是一个小部件,它在视觉上不是任何其他小部件的子部件 通常有一个框架和一个窗口标

我有一个QGLWidget作为应用程序UI的一部分。它不是一个中心小部件,它周围还有很多其他小部件。我想在用户单击按钮时全屏显示它。类似于youtube视频flash播放器上的功能

我尝试过使用showFullScreen,但没有效果

我读过很多书,但他们建议使用全屏显示

Qt文档说明,使用showFullScreen小部件必须是一个独立的窗口。所以我想应该有一些技巧

该功能仅适用于windows。从Qt文档中:

窗口是一个小部件,它在视觉上不是任何其他小部件的子部件 通常有一个框架和一个窗口标题

一种可能的解决方案如下:

当用户单击“显示全屏”按钮时

  • 创建一个没有父对象的新QGlWidget,并为其设置QGlWidget的内容
  • 在其上使用showFullScreen功能
也许更好的办法是将QGlWidget子类化,并在其构造函数中传递指向另一个QGlWidget的指针。构造器应该获取所提供小部件的上下文,并将其应用于新的小部件

  • 在子类上捕获键盘事件。当用户按下Esc键时,会发出一个信号
  • 在基类中,捕获此信号并将其连接到插槽。在此插槽中隐藏全屏QGlWidget并将其删除
我找到的解决方案:

void MyApp::on_fullscreen_button_clicked() {
    QDialog *dlg = new QDialog(this);
    QHBoxLayout *dlg_layout = new QHBoxLayout(dlg);
    dlg_layout->setContentsMargins(0, 0, 0, 0);
    dlg_layout->addWidget(glwidget_);
    dlg->setLayout(dlg_layout);
    dlg->showFullScreen();

    bool r = connect(dlg, SIGNAL(rejected()), this, SLOT(showGlNormal()));
    assert(r);
    r = connect(dlg, SIGNAL(accepted()), this, SLOT(showGlNormal()));
    assert(r);
}

void MyApp::showGlNormal() {
    ui.glBox->layout()->addWidget(glwidget_);
}