Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 将QGLWidget设置为其他窗口的父窗口时全屏显示_Qt_Fullscreen_Qglwidget - Fatal编程技术网

Qt 将QGLWidget设置为其他窗口的父窗口时全屏显示

Qt 将QGLWidget设置为其他窗口的父窗口时全屏显示,qt,fullscreen,qglwidget,Qt,Fullscreen,Qglwidget,我通过调用QGLWidget的showFullScreen()和showNormal()来打开/关闭全屏,QGLWidget是我的Qt应用程序的顶级窗口。但是,我希望有一个从QGLWidget派生的gl窗口,作为更复杂GUI的一部分,作为另一个主窗口的父窗口,其中包含其他小部件(包括另一个glwidget),并使这个“主要”gl窗口能够通过按键全屏显示和返回。我还没有找到说明如何操作的文档,有什么帮助吗 谢谢 基本上,您需要为嵌套的QGLWidget或它的父对象找到一种方法,用QGLWidget

我通过调用QGLWidget的showFullScreen()和showNormal()来打开/关闭全屏,QGLWidget是我的Qt应用程序的顶级窗口。但是,我希望有一个从QGLWidget派生的gl窗口,作为更复杂GUI的一部分,作为另一个主窗口的父窗口,其中包含其他小部件(包括另一个glwidget),并使这个“主要”gl窗口能够通过按键全屏显示和返回。我还没有找到说明如何操作的文档,有什么帮助吗


谢谢

基本上,您需要为嵌套的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()。

基本上,您需要为嵌套的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()若要还原,请将其更改为全屏,然后再次更改父项。您可以为此情况创建一个单独的QGLWidget,默认情况下隐藏该QGLWidget,或者在应调整窗口大小时(请参见
setParent()
)将其父项更改为全屏,若要还原,请再次更改父项。