2012-09-09 28 views
5

考慮一個QWidget,通常是一些Layout中的一個子項。Qt Widget暫時全屏

假設我想讓它全屏一段時間,然後讓它回到它的舊點。

QWidget::setFullScreen()要求該小部件需要是一個獨立的窗口 - 任何想法如何解決它?

回答

3

我能看到的最簡單的辦法就是重新設置父級爲0。事情是這樣的:

#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

很好的答案!另外,它也是一個mainWindow內佈局的一部分,所以你應該使用佈局方法:「index = indexOf(this)」,當轉換全屏模式時,你可以通過調用包含的佈局方法:「insertWidget(this,index)」。 – Gombat

1

我已經修改了前面的例子。前面的例子永遠不會回到正常屏幕。

只需複製粘貼代碼,它就會運行。

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