2012-09-09 24 views
5

Normalde bazı Düzen'de bir QWidget'i düşünün.Qt Widget geçici olarak tam ekran

Bir süre tam ekran yapmak istediğimi varsayalım, o zaman eski yerine dönün.

QWidget::setFullScreen(), widget'in bağımsız bir pencere olması gerektiğini gerektirir - herhangi bir fikir nasıl çalışır? Ben önceki örneği değiştirdiniz

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

cevap

3

basit yolu böyle 0. Something Reparent etmektir. Önceki örnek asla normal ekrana geri dönmez.

Sadece kopyalayıp yapıştırarak kodu çalıştırın.

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

Harika yanıt! Buna ek olarak, bu widget bir mainWindow içindeki bir düzenin parçası ya da bu nedenle, düzenleri yöntemini kullanmanız gerekir: "index = indexOf (this)" ve tam ekran modundan kaçarken, widget'ı tekrar arayarak mainWindow'a ekleyebilirsiniz. içeren düzenler yöntemi: "insertWidget (bu, dizin)". – Gombat

1

: Görebildiğim