如何让 QWebEngineView 进入全屏 [Qt 5.8]

问题描述 投票:0回答:3

我有以下代码,我想让我的

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
3个回答
2
投票

如果你的widget在tab内,那么它不能直接全屏。你有两个选择:

  • 当你想让它全屏时(例如,如果你有一个全屏按钮),将它从选项卡中删除,并使它成为一个独立的小部件。退出全屏模式时将其重新插入
    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 在这两种情况下,小部件都将具有窗口管理器框架。如果你想删除它,你可以尝试设置

Qt::FramelessWindowHint
标志。考虑到删除框架也可能使某些操作不可用(至少在 Windows 上),例如移动、调整大小、捕捉......


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);
        }

0
投票

我找到了一种简单的全屏方式。我用 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()));
  1. onFullScreen 插槽,只需切换 QtWdiget 窗口标志

    void HzWindow::onFullScreen(){ setWindowState(windowState() ^ Qt::WindowFullScreen); }

这就是我所做的一切。

© www.soinside.com 2019 - 2024. All rights reserved.