2011-11-04 95 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並將其刪除。