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]