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