Как показать QGLWidget на весь экран? - PullRequest
1 голос
/ 04 ноября 2011

У меня есть QGLWidget как часть пользовательского интерфейса моего приложения. Это НЕ центральный виджет , вокруг него много других виджетов. Я хочу показать его в полноэкранном режиме, когда пользователь нажимает кнопку. Подобная функциональность, как на YouTube Flash Player.

Я пытался использовать showFullScreen без эффекта.

Я прочитал how-to-fullscreen-a-qglwidget и fullscreen-widget , но они предлагают использовать showFullScreen.

В документации Qt указано, что для использования виджета showFullScreen должно быть независимое окно. Поэтому я предполагаю, что для этого должен быть какой-то трюк.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Решение, которое я нашел:

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 голосов
/ 04 ноября 2011

Функция showFullScreen работает только на окнах.Из документации Qt:

Окно - это виджет, который визуально не является дочерним для любого другого виджета и обычно имеет рамку и заголовок окна.

Возможное решение заключается в следующем:

Когда пользователь нажимает кнопку показа полноэкранного режима

  • Создайте новый QGlWidget без родителя и установите для него содержимоеQGlWidget
  • Используйте для этого функцию showFullScreen ...

Может быть, лучше создать подкласс QGlWidget и передать его конструктору указатель на другой QGlWidget.Конструктор должен взять контекст предоставленного виджета и применить его к новому.

  • В вашем подклассе перехватывать события клавиатуры.Когда пользователь нажимает клавишу Esc, выдает сигнал
  • . В вашем базовом классе поймайте этот сигнал и подключите его к слоту.В этом слоте скрыть полноэкранный QGlWidget и удалить его.
...