如何让 QWebEngineView 进入全屏 [Qt 5.8]
How to make QWebEngineView go fullscreen [Qt 5.8]
我有以下代码,我想让我的 QWebEngineView
(Qt 5.8) 全屏显示。我的 WebView
class 在 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()
方法。
EDIT 在这两种情况下,小部件都将具有 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);
}
我有以下代码,我想让我的 QWebEngineView
(Qt 5.8) 全屏显示。我的 WebView
class 在 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()
方法。
EDIT 在这两种情况下,小部件都将具有 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);
}