2017-03-28 4 views
0

Ich habe den folgenden Code und ich möchte meine QWebEngineView (Qt 5.8) Vollbild zu machen. Meine WebView Klasse ist unter einer QTabWidget, so dass es nur die Registerkarte nicht den gesamten Bildschirm ausfüllen. Wie kann ich den Vollbildmodus aktivieren?Wie man QWebEngineView zum Vollbild machen [Qt 5.8]

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

Antwort

2

Wenn sich Ihr Widget in einem Tab befindet, kann es nicht direkt im Vollbildmodus angezeigt werden. Sie haben zwei Möglichkeiten:

  • es von der Registerkarte entfernen, wenn Sie es Vollbild (zum Beispiel, wenn Sie einen Vollbild Taste) machen wollen und es sich um ein Standalone-Widget machen. Legen Sie es wieder in den QTabWidget, wenn Sie den Vollbildmodus beenden.
  • Machen Sie die QTabWidget, um den Bildschirm zu erfüllen.

In beiden Fällen können Sie so etwas wie dieses verwenden können, um den ganzen Bildschirm zu machen zu besetzen:

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

Es wird der Bildschirm erfüllen, sondern wird in der Taskleiste sichtbar (in meiner Erfahrung halten dies ist sehr zu empfehlen, damit der Benutzer leicht zu anderen Aufgaben wechseln kann). Wenn Sie es abdecken möchten, verwenden Sie einfach geometry() anstelle der availableGeometry() Methode.

BEARBEITEN In beiden Fällen wird das Widget den Windows-Manager-Rahmen haben. Wenn Sie es entfernen möchten, können Sie versuchen, die Qt::FramelessWindowHint Flagge zu setzen. Berücksichtigen Sie, dass das Entfernen von Rahmen auch einige Aktionen nicht möglich macht (zumindest unter Windows) wie

+0

ich Ihre Antwort nützlich gefunden, inzwischen ich andere Methode gefunden, das gleiche zu tun (was ich als Antwort gepostet), könnten Sie mir bitte sagen, ob es einige Fehler in meinem geschrieben ist Antwort, Danke – Tarptaeya

+0

Du hast Recht! Ich habe das vergessen (das ['showFullScreen'] (http://doc.qt.io/qt-5/qwidget.html#showFullScreen), was im Grunde die zweite Option ist, die die volle Geometrie des Desktops verwendet, obwohl Widgets mit Vollbildmodus kann anders gehandhabt werden (siehe Dokumentation zu X11). – cbuchart

1

Ich habe einen Weg gefunden, dies zu tun, also beantworte ich meine eigene Frage: ich kann die acceptFullScreen Funktion ändern:

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