QWidget关闭子窗口后显示主窗口(父窗口)

时间:2021-09-24 23:50:14

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 }

上述源码经测试通过,如有疑问请留言或者联系邮箱:1285015525@qq.com