2012-09-09 8 views
5

Betrachten Sie ein QWidget, normalerweise ein Kind in einigen Layout.Qt Widget vorübergehend Vollbild

Angeblich möchte ich es für eine Weile fullScreen machen, dann muss es an seinen alten Ort zurückkehren.

QWidget::setFullScreen() erfordert, dass das Widget ein unabhängiges Fenster sein muss - irgendwelche Ideen, wie man es ausarbeitet?

Antwort

3

Die einfachste Art, wie ich sehen kann, ist auf 0 gesetzt, so etwas Reparent:

#include <QApplication> 
#include <QPushButton> 

class MyButton : public QPushButton 
{ 
public: 
    MyButton(QWidget* parent) : QPushButton(parent) {} 

    void mousePressEvent(QMouseEvent*) { 
     this->setParent(0); 
     this->showMaximized(); 
     this->show(); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QWidget mainWidget; 
    MyButton button(&mainWidget); 
    mainWidget.show(); 

    return a.exec(); 
} 
+1

Große Antwort! Darüber hinaus ist das Widget Teil eines Layouts in einem Hauptfenster oder so, Sie sollten die Layout-Methode verwenden: "index = indexOf (this)" und wenn Sie den Vollbildmodus verlassen, können Sie das Widget erneut zum Hauptfenster hinzufügen, indem Sie aufrufen die enthaltende Layout-Methode: "insertWidget (this, index)". – Gombat

1

ich das vorherige Beispiel geändert haben. Das vorherige Beispiel kehrt nie zum normalen Bildschirm zurück.

Kopieren Sie einfach den Code und es wird ausgeführt.

 #include <QApplication> 
     #include <QPushButton> 

     class MyButton : public QPushButton 
     { 
     public: 
      MyButton(QWidget* parent) : QPushButton(parent) { 
       m_pParent = parent; 
       maxMode = false; 
      } 
      QWidget * m_pParent; 
      bool maxMode; 
      Qt::WindowFlags m_enOrigWindowFlags; 
      QSize m_pSize; 

      void mousePressEvent(QMouseEvent*) { 
       if (maxMode== false) 
       { 
        m_enOrigWindowFlags = this->windowFlags(); 
        m_pSize = this->size(); 
        this->setParent(0); 
        this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint); 
        this->showMaximized(); 
        maxMode = true; 
       } 
       else 
       { 
        this->setParent(m_pParent); 
        this ->resize(m_pSize); 
        this->overrideWindowFlags(m_enOrigWindowFlags); 
        this->show(); 
        maxMode = false; 
       } 
      } 
     }; 

     int main(int argc, char *argv[]) 
     { 
      QApplication a(argc, argv); 

      QWidget mainWidget; 
      MyButton button(&mainWidget); 
      mainWidget.show(); 

      return a.exec(); 
     }