QWidget關閉子窗口後顯示主窗口(父窗口)

Holle~

好久沒見了,據我上次發博客已經過去很久。今天呢,帶給大家一個Qt上的小問題!

好多初學者在Qt中,常常遇到關閉子窗口後,如何才能將上一級的窗口重新顯示出來。衆所周知的是,我們使用QDialog的exec函數可以實現上面的問題,但我們除了QDialog就不能在使用QWidget的時候也如此調用??事實上是不能的!

QDialog普遍來說是一種對話框的形式,而QWidget是窗體(窗口)

在QWidget中想要實現上述功能,需要信號槽關聯,具體操作請參照下面的代碼:

父窗口的頭文件

 1 #ifndef WIDGET_H
 2 #define WIDGET_H
 3 
 4 /**
 5      * 工程名:Test
 6      * 作者:夜瀟
 7      * 日期:2018-03-26 週一
 8      * 時間:17:23:30
 9      * */
10 
11 #include <QWidget>
12 #include <QPushButton>
13 #include "child.h"
14 
15 class Widget : public QWidget
16 {
17     Q_OBJECT
18 
19 public:
20     Widget(QWidget *parent = 0);
21 private:
22     QPushButton *NewBtn;
23     ChildWin *childWin;
24 private slots:
25     void NewBtnClick(); //爲了更好地觀察,定義一個按鈕事件用來觸發子窗口加載
26 };
27 
28 #endif // WIDGET_H

父窗口的源文件:

 1 #include "widget.h"
 2 /**
 3  * 此文件主要實現,QWidget窗口父子之間的相互加載
 4  * ——夜瀟
 5  * */
 6 Widget::Widget(QWidget *parent)
 7     : QWidget(parent)
 8 {
 9     setFixedSize(800,640);
10     NewBtn = new QPushButton("加載子窗口",this);
11     connect(NewBtn,SIGNAL(clicked(bool)),this,SLOT(NewBtnClick()));
12 }
13 
14 void Widget::NewBtnClick()
15 {
16     //功能實現:新建子窗口並且加載子窗口隱藏或關閉父窗口
17     childWin = new ChildWin;
18     childWin ->show();
19     this -> hide();
20     //功能實現:當子窗口觸發了關閉事件後,主窗口獲取的子窗口關閉信號並還原主窗口
21     connect(childWin,SIGNAL(ExitWin()),this,SLOT(show()));
22 }

子窗口的頭文件:

 1 #ifndef CHILD_H
 2 #define CHILD_H
 3 
 4 #include <QWidget>
 5 #include <QCloseEvent>
 6 class ChildWin : public QWidget
 7 {
 8     Q_OBJECT
 9 public:
10     ChildWin(QWidget *parent = 0);
11     //重寫關閉事件
12     void closeEvent(QCloseEvent *);
13 signals:
14     void ExitWin();//新建一個信號槽
15 };
16 
17 #endif // CHILD_H

子窗口的源文件:

 1 #include "child.h"
 2 
 3 ChildWin::ChildWin(QWidget *parent) : QWidget(parent)
 4 {
 5     setFixedSize(400,320);
 6 }
 7 //當窗口出發關閉事件後,將信號發射出去
 8 void ChildWin::closeEvent(QCloseEvent *)
 9 {
10     emit ExitWin();
11 }

上述源碼經測試通過,如有疑問請留言或者聯繫郵箱:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章