如何在全屏显示QGLWidget?

时间:2011-11-04 11:25:22

标签: qt qt4 fullscreen qglwidget

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

我尝试使用 showFullScreen 但没有效果。

我已阅读how-to-fullscreen-a-qglwidgetfullscreen-widget,但他们建议使用showFullScreen。

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

2 个答案:

答案 0 :(得分:2)

我发现的解决方案:

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_);
}

答案 1 :(得分:0)

showFullScreen功能仅适用于Windows。从Qt文档:

  

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

可能的解决方案如下:

当用户点击显示全屏按钮

  • 创建一个没有父的新QGlWidget 并设置QGlWidget的内容
  • 使用showFullScreen函数...

也许更好的想法是继承QGlWidget并在其构造函数中传递指向另一个QGlWidget的指针。构造函数应该获取提供的窗口小部件的上下文并将其应用于新窗口小部件。

  • 在您的子类上捕获键盘事件。当用户按Esc发出信号时
  • 在您的基类中捕获此信号并将其连接到插槽。在此插槽中隐藏全屏QGlWidget并将其删除。