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的文档)。