2012-09-09 32 views
5

Hãy xem xét một QWidget, thường là một đứa trẻ trong một số Bố cục.Tiện ích con phụ trợ tạm thời toàn màn hình

Giả sử tôi muốn làm cho toàn màn hình trong một thời gian, sau đó quay trở lại vị trí cũ của nó.

QWidget::setFullScreen() yêu cầu tiện ích phải là cửa sổ độc lập - bất kỳ ý tưởng nào về cách làm việc đó?

Trả lời

3

Cách đơn giản nhất tôi có thể thấy là reparent để 0. Một cái gì đó như thế này:

#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

Câu trả lời hay! Ngoài ra, tiện ích này là một phần của bố cục bên trong mainWindow, bạn nên sử dụng phương thức bố cục: "index = indexOf (this)" và khi thoát chế độ toàn màn hình, bạn có thể thêm lại tiện ích vào mainWindow bằng cách gọi phương thức bố cục chứa: "insertWidget (this, index)". – Gombat

1

tôi đã sửa đổi ví dụ trước. Ví dụ trước không bao giờ quay trở lại màn hình bình thường.

Chỉ cần sao chép dán mã và mã sẽ chạy.

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