我已经成功地通过调用 showFullScreen() 和 showNormal() 来打开/关闭全屏,因为 QGLWidget 是我的 Qt 应用程序的顶级窗口。但是,我希望有一个从 QGLWidget 派生的 gl 窗口作为更复杂的 GUI 的一部分,作为另一个主窗口的父窗口,其中包含其他小部件(包括另一个 glwidget),并且让这个“主要”gl 窗口能够全屏显示击键返回。我找不到向我展示如何执行此操作的文档,有什么帮助吗?
谢谢!!
我已经成功地通过调用 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()。