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