已经弃坑,不再使用Qt工具,有疑问可以查阅博主的其它博客,看看有没有解决方案,如果还没有可以百度或Google搜一下其他博主的教程!谢谢~
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