如何让QWebEngineView全屏显示[Qt 5.8]

时间:2017-03-28 19:39:41

标签: c++ qt fullscreen qtwebengine qt5.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));
    }
}

2 个答案:

答案 0 :(得分:2)

如果您的小部件位于标签内,则无法直接全屏显示。您有两种选择:

  • 如果要将其全屏显示(例如,如果您有全屏按钮),请将其从选项卡中删除,并将其设置为独立窗口小部件。退出全屏模式时将其重新插入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()方法。

编辑在这两种情况下,窗口小部件都将具有Windows管理器框架。如果要删除它,可以尝试设置Qt::FramelessWindowHint标志。考虑到移除框架也可能使某些操作不可用(至少在Windows上),例如移动,调整大小,捕捉......

答案 1 :(得分:1)

我找到了一种方法,所以我回答了我自己的问题: 我可以将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);
        }