C++ 如何使QWebEngineView全屏显示[Qt 5.8]

C++ 如何使QWebEngineView全屏显示[Qt 5.8],c++,qt,fullscreen,qtwebengine,qt5.8,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
(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));
    }
}

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

  • 当您想要使其全屏显示(例如,如果您有全屏按钮)并使其成为独立的小部件时,请将其从选项卡中删除。退出全屏模式时,将其重新插入
    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上),例如移动、调整大小、捕捉…

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

  • 当您想要使其全屏显示(例如,如果您有全屏按钮)并使其成为独立的小部件时,请将其从选项卡中删除。退出全屏模式时,将其重新插入
    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上),例如移动、调整大小、捕捉…

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

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

我发现你的答案很有用,同时我也找到了其他方法来做同样的事情(我把它作为答案发布),你能告诉我我发布的答案中是否有错误吗,谢谢你的回答是正确的!我忘记了其中一个(基本上是第二个使用桌面完整几何体的选项,尽管全屏小部件的处理方式可能不同(请参阅关于X11的文档)。我发现您的答案很有用,同时我发现其他方法也可以这样做(我将其发布为答案),你能告诉我我贴出的答案中是否有错误吗,谢谢你说的对!我忘记了一个(基本上是第二个选项,使用桌面的完整几何图形,尽管全屏小部件的处理方式可能不同(请参阅关于X11的文档)。