2017-03-28 65 views
0

다음 코드를 가지고 있는데 QWebEngineView (Qt 5.8)을 전체 화면으로 만들고 싶습니다. 내 WebView 클래스는 QTabWidget 아래에 있으므로 전체 화면이 아닌 탭을 채우고 있습니다. 어떻게 전체 화면으로 만들 수 있습니까?QWebEngineView를 전체 화면으로 만드는 방법

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

답변

2

위젯이 탭 안에 있으면 바로 전체 화면이 될 수 없습니다. 당신이 전체 화면 (예를 들어, 당신은 전체 화면 버튼이있는 경우)과 독립 위젯을 만들 수 있도록하고자 할 때

  • 가 탭에서 제거 : 당신은 두 가지 옵션이 있습니다. 전체 화면 모드를 종료 할 때 QTabWidget에 다시 삽입하십시오.
  • QTabWidget을 화면에 표시하십시오. 당신이 전체 화면을 차지하기 위해이 같은 것을 사용할 수있는 두 가지 경우 모두

: 그것은 화면을 충족하지만이는 것이 좋습니다 내 경험에 (눈에 보이는 작업 표시 줄을 유지합니다

// Replace the 0 with the screen index 
const auto windowGeometry = qApp->desktop()->availableGeometry(0); 
widget.move(windowGeometry.topLeft()); 
widget.resize(windowGeometry.size()); 

을, 사용자는 쉽게 다른 작업으로 전환 할 수 있습니다.) 커버하려는 경우 availableGeometry() 대신 geometry()을 사용하십시오.

EDIT 두 경우 모두 위젯에는 Windows 관리자 프레임이 있습니다. 제거하고 싶다면 Qt::FramelessWindowHint 플래그를 설정해보십시오. 프레임을 제거하면 이동, 크기 조정, 스냅과 같은 일부 작업을 사용할 수 없게됩니다 (적어도 Windows에서는).

+0

내 게시에 약간의 실수가있는 경우 당신이 나에게 알려 주시기 바랍니다 수 있습니다, 그 사이에 나는 (내가 대답으로 게시하는) 동일한 기능을 수행 할 수있는 다른 방법을 발견 : 나는이 acceptFullScreen 기능을 변경할 수 있습니다 대답, 감사합니다 – Tarptaeya

+0

네가 맞다! 기본적으로 데스크톱의 전체 모양을 사용하는 두 번째 옵션 인 ['showFullScreen'] (http://doc.qt.io/qt-5/qwidget.html#showFullScreen)을 잊었습니다. 전체 화면 위젯 다르게 처리 될 수 있습니다 (X11에 대한 설명서 참조). – cbuchart

1

나는이 방법을 발견하여 내 자신의 질문에 대답하고 있습니다. 나는 당신의 대답은 유용하다고

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