将QGLWidget全屏转换为其他窗口的父级

时间:2011-08-26 18:58:16

标签: qt fullscreen qglwidget

我已经设法通过调用showFullScreen()和showNormal()为我的Qt应用程序的顶级窗口QGLWidget打开/关闭全屏。但是,我希望有一个从QGLWidget派生的gl窗口作为更复杂的GUI的一部分,其中包含其他小部件(包括另一个glwidget)的另一个主窗口,并且让这个“主要”gl窗口能够全屏显示回击一下。我无法找到文件向我展示如何做到这一点,任何帮助?

谢谢!

1 个答案:

答案 0 :(得分:0)

基本上,您需要为嵌套的QGLWidget或其父级提供一种方法,以便与另一个QGLWidget实例一起调用showFullScreen()。然后有办法回去。

要通过按键或鼠标单击执行此操作,您需要重新实现QKeyEvent和QMouseEvent,以便在您希望全屏显示和全屏隐藏作为可用选项时将获得焦点的所有小部件。

因此,根据您弹出的窗口数量以及与GUI的QMainWindow部分分开显示的窗口,您可能希望其他窗口也支持按键,以隐藏/显示您的全屏QGLWidget。

以下是我如何做过一次的代码片段,但仅限于鼠标互动:

void MyWidget::enterEvent(QEvent *)
{
    if(this->isFullScreen())
    {
        textItem->setText("Click again to return");
    }
    else
        textItem->setText("Click for full screen");

    //      if(!clearTextTimer->isActive())
    //          clearTextTimer->start();
    clearTextTimer->start();
    this->update();
}

void MyWidget::mouseReleaseEvent(QMouseEvent *event)
{
    static MyWidget * w = 0;
    if(pixItem->contains(mapToScene(event->pos()))
            && event->button() != Qt::NoButton
            && w == 0)
    {
        w = new MyWidget();
        w->showFullScreen();
    }
    else
    {
        if(this->isMaximized())
            this->close();
        else
            w->close();
        delete w;
        w = 0;
    }
}

您还需要查看grabKeyboard()和releaseKeyboard()。