【问题标题】:How to make QWebEngineView go fullscreen [Qt 5.8]如何使 QWebEngineView 全屏显示 [Qt 5.8]
【发布时间】:2017-03-28 19:39:41
【问题描述】:

我有以下代码,我想让我的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));
    }
}

【问题讨论】:

    标签: c++ qt fullscreen qtwebengine qt5.8


    【解决方案1】:

    如果您的小部件位于选项卡内,则它不能直接全屏显示。你有两个选择:

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

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

    【讨论】:

    • 我发现你的答案很有用,同时我发现了其他方法可以做同样的事情(我发布为答案),如果我发布的答案有错误,请告诉我,谢谢
    • 你说得对!我忘记了那个(showFullScreen,它基本上是使用桌面的完整几何形状的第二个选项,尽管全屏小部件的处理方式可能不同(请参阅有关 X11 的文档)。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 2011-02-26
      • 2011-09-19
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多