Как заставить QWebEngineView работать в полноэкранном режиме [Qt 5.8]

У меня есть следующий код, и я хочу сделать мой QWebEngineView (Qt 5.8), чтобы перейти на полный экран. мой WebView класс находится под QTabWidget так что просто заполняйте вкладку, а не весь экран. Как я могу сделать его полноэкранным?

class WebView:public QObject{
    void acceptFullScreen(QWebEngineFullScreenRequest request){
        request.accept();
    }

public:
    char* home_page;
    QWebEngineView* view=new QWebEngineView();
    WebView(char* page=(char*)"file:///home/tarptaeya/Desktop/Crusta_Prototype_python/about.html"){
        this->home_page=page;
        createWebView();
        this->view->settings()->setAttribute(QWebEngineSettings::FullScreenSupportEnabled,true);
        this->view->settings()->setAttribute(QWebEngineSettings::PluginsEnabled,true);
        this->view->settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows,true);
        connect(this->view->page(),&QWebEnginePage::fullScreenRequested,this,&WebView::acceptFullScreen);
    }
    void createWebView(){
        this->view->load(QUrl(this->home_page));
    }
}

3 ответа

Решение

Если ваш виджет находится во вкладке, то он не может быть в полноэкранном режиме напрямую. У вас есть два варианта:

  • Удалите его из вкладки, когда вы хотите сделать его полноэкранным (например, если у вас есть полноэкранная кнопка) и сделайте его автономным виджетом. Вставьте его обратно в QTabWidget при выходе из полноэкранного режима.
  • Сделать QTabWidget выполнить экран.

В обоих случаях вы можете использовать что-то вроде этого, чтобы оно занимало весь экран:

// Replace the 0 with the screen index
const auto windowGeometry = qApp->desktop()->availableGeometry(0);
widget.move(windowGeometry.topLeft());
widget.resize(windowGeometry.size());

Он будет работать на экране, но будет держать панель задач видимой (по моему опыту, это настоятельно рекомендуется, чтобы пользователь мог легко переключаться на другие задачи). Если вы хотите покрыть это, просто используйте geometry() вместо availableGeometry() метод.

РЕДАКТИРОВАТЬ в обоих случаях виджет будет иметь рамку диспетчера окон. Если вы хотите удалить его, вы можете попробовать установить Qt::FramelessWindowHint флаг. Примите во внимание, что удаление рамки может также сделать некоторые действия недоступными (по крайней мере, в Windows), такие как перемещение, изменение размера, привязка...

Я нашел способ сделать это, поэтому я отвечаю на свой вопрос: я могу изменить acceptFullScreen функционировать как:

void acceptFullScreen(QWebEngineFullScreenRequest request){
        if(request.toggleOn()){
            request.accept();
            QWidget* w=(QWidget*)this->view->parent();
            this->layout=w->layout();
            this->layout->removeWidget(this->view);
            this->view->setParent(0);
            this->view->showFullScreen();
        }
        else{
            request.accept();
            this->layout->addWidget(this->view);
        }

Я нахожу простой способ перейти в полноэкранный режим. МойQtWebEngineviewэто центральный виджет главного окна, я использовал ctrl+shift+F11для переключения в полноэкранный режим.

  1. Включите и подключите сигнал и слот
            auto settings = m_webEngineView->settings();
    settings->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, true);
    QShortcut *fullscreen = new QShortcut(this);
    fullscreen->setKey(Qt::CTRL + Qt::SHIFT + Qt::Key_F11);
    connect(fullscreen, SIGNAL(activated()), this, SLOT(onFullScreen()));
    
  2. onFullScreenслот, просто переключитеQtWdigetоконные флаги
            void HzWindow::onFullScreen(){
       setWindowState(windowState() ^ Qt::WindowFullScreen);
    }
    

Это все, что я сделал.

Другие вопросы по тегам