2011-11-04 73 views
1

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

我试图用showFullScreen没有效果。

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

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

回答

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

showFullScreen函数仅适用于窗口。从Qt文档:

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

一个可能的解决方案是:

当用户点击显示全屏按钮

  • 没有父创建一个新的QGLWidget来绘图并设置它,你的内容QGLWidget来绘图
  • 使用showFullScreen函数...

也许最好是继承QGlWidget并将其构造函数传递给另一个QGlWidget。构造函数应该使用提供的小部件的上下文并将其应用于新的小部件。

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