Как заставить QWebEngineView работать в полноэкранном режиме [Qt 5.8]

У меня есть следующий код, и я хочу сделать мой 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));
}
}

0

Решение

Если ваш виджет находится во вкладке, то он не может быть в полноэкранном режиме напрямую. У вас есть два варианта:

  • Удалите его из вкладки, когда вы хотите сделать его полноэкранным (например, если у вас есть полноэкранный кнопку) и сделать его автономным виджетом. Вставьте его обратно в 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() метод.

РЕДАКТИРОВАТЬ в обоих случаях виджет будет иметь рамку менеджера окон. Если вы хотите удалить его, вы можете попробовать установить Qt::FramelessWindowHint флаг. Примите во внимание, что удаление рамки может также сделать некоторые действия недоступными (по крайней мере, в Windows), такие как перемещение, изменение размера, привязка …

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

По вопросам рекламы [email protected]