2012-09-09 12 views
5

Considere un QWidget, normalmente un niño en algún diseño.Qt Widget temporalmente a pantalla completa

Supongo que quiero que sea pantalla completa por un tiempo, luego hacer que vuelva a su lugar anterior.

QWidget::setFullScreen() requiere que el widget necesite ser una ventana independiente, ¿alguna idea de cómo resolverlo?

Respuesta

3

La forma más sencilla que puedo ver es a Reparent a 0. Algo como esto:

#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

¡Excelente respuesta! Además, si el widget forma parte de un diseño dentro de una ventana principal, debe usar el método de diseños: "index = indexOf (this)" y al escaparse del modo de pantalla completa, puede agregar el widget nuevamente a la ventana principal llamando el método de diseños que lo contiene: "insertWidget (this, index)". – Gombat

1

He modificado el ejemplo anterior. El ejemplo anterior nunca vuelve a la pantalla normal.

Copie y pegue el código y se ejecutará.

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