Превращение QGLWidget в полноэкранный режим при переходе в другое окно - PullRequest
2 голосов
/ 26 августа 2011

Мне удалось включить / выключить полноэкранный режим, вызвав showFullScreen () и showNormal () для QGLWidget, который является окном верхнего уровня моего приложения Qt. Тем не менее, я хотел бы иметь окно gl, производное от QGLWidget, как часть более сложного графического интерфейса пользователя, родительское для другого основного окна с другими виджетами в нем (включая другой glwidget), и чтобы это «основное» окно gl могло работать в полноэкранном режиме вернуться с нажатием клавиши. Я не смог найти документацию, показывающую мне, как это сделать, какую-либо помощь?

Спасибо !!

1 Ответ

0 голосов
/ 03 февраля 2012

По сути, вам нужно иметь способ для вложенного QGLWidget или его родителя вызывать showFullScreen () с другим экземпляром вашего QGLWidget.Затем есть способ вернуться назад.

Чтобы сделать это нажатием клавиши или щелчком мыши, вам нужно переопределить QKeyEvent и QMouseEvent для всех виджетов, которые будут иметь фокус, когда вы хотите полноэкранное отображение и полноэкранное скрытие.в качестве доступной опции.

Так, в зависимости от того, сколько окон вы открываете и отображаете отдельно от вашей части QMainWindow вашего GUI, вы можете захотеть, чтобы другие окна также поддерживали нажатие клавиши, которая будет выполнять скрытие /покажите свой полноэкранный 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().

...