QT版本:Qt Creator 4.10.2 Qt 5.13.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 5.3.1 20160406 (Red Hat 5.3.1-6)) on "xcb"

操作系统: Debian GNU/Linux 9 (stretch) [linux version 4.9.0-14-amd64]

两个widget使用信号进行通信:

主窗体的头文件中包含子窗体的头文件:

#include "waitform.h"

添加子窗体的指针和处理信号的槽函数:

    WaitForm* waitForm;
public slots:void slotShowWindow();

主窗体的实现中添加槽函数的实现:

void Widget::slotShowWindow()
{// 显示主窗体this->show();
}

主窗体中实例化子窗体时的初始化如下:

    // 创建子窗体waitForm = new WaitForm(this);// 通过connect函数连接信号和槽函数connect(waitForm, SIGNAL(LinkError()), this, SLOT(slotShowWindow()));// 显示子窗体waitForm->show();// 隐藏主窗体this->hide();

子窗体在实现时需要定义一个LinkError的信号:

// waitform.h#ifndef WAITFORM_H
#define WAITFORM_H#include <QWidget>
#include <QDebug>
#include <QTimer>namespace Ui {
class WaitForm;
}class WaitForm : public QWidget
{Q_OBJECTpublic:explicit WaitForm(QWidget *parent = nullptr);~WaitForm();signals:void LinkError();   // 信号函数是不用实现的private:Ui::WaitForm *ui;
};#endif // WAITFORM_H// waitform.c#include "waitform.h"
#include "ui_waitform.h"
#include "Global.h"  // 全局变量WaitForm::WaitForm(QWidget *parent) :QWidget(parent),ui(new Ui::WaitForm)
{ui->setupUi(this);qDebug() << this << "Create WaitForm ok:" << m_global.ClientIp;// 定义一个定时器QTimer *timer = new QTimer;// 设置定时器中断时间为2秒后timer->setInterval(2000);// 开启定时器timer->start();// 定时器超时后的处理采用匿名函数实现    connect(timer, &QTimer::timeout,  [&](){qDebug()<< this << "timeOut :" << m_global.ClientIp;// 停止定时timer->stop();// 发送信号emit LinkError();// 关闭窗口this->close();});
}WaitForm::~WaitForm()
{delete ui;
}

测试结果:如果没有timer->stop()操作,主窗口在第一次调用之后会每隔2秒钟发送一次LinkError信号,导致第2次打开子窗口后不到2秒主窗口就自动显示,同时子窗口不会消失;如果在创建子窗体时加入waitForm->setAttribute(Qt::WA_DeleteOnClose);子窗体关闭后,主窗体异常关闭。感觉子窗体创建后实际是需要等待整个程序结束后才会释放占用的资源的,调用资源较少时可以使用,如果需要立即回收资源的话需要其他方法,现在的程序暂时不考虑。

qt mdi 子窗口关闭再打开_QT 信号的使用方法相关推荐

  1. QT 在子窗口中调用主窗口的UI

    在QT中,我们时常会需要在主窗口里添加一些子窗口,比如添加一个新的对话框,或者在TabWidget中添加tab页面.通常添加子窗口后,如果在子窗口中做了一些操作,我们需要在主窗口中通过UI控件反映出来 ...

  2. javascript用window open的子窗口关闭自己并且刷新父窗口

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在字窗口 ...

  3. mysql如何导入JSON数据-navigate管理数据库,导入JSON数据不显示。需要整体关闭再打开!

    1,选中数据,右键.选择导入: 2,选择你要导入的文件格式.[这里我选择的是json] 3.下一步.选择你要导入的文件 [可以多选点,但是选择过多.好像直接崩溃啦.所以,适量即可!] 关于编码,如果选 ...

  4. 使窗口(和 MDI 子窗口)的关闭按钮变灰的方法 - 回复 梦想成真

    问题来源: http://www.cnblogs.com/del/archive/2008/06/14/1221980.html#1225922 //这样就可以使当前窗口的关闭按钮变灰, 但系统菜单中 ...

  5. Extjs4 Tab面板Mapbar地图关闭再打开气泡失效问题解决

    Extjs4 Tab面板Mapbar地图关闭再打开气泡失效问题非常不稳定,时好时坏.最终采取了最新的mapbar地图 <script type="text/javascript&quo ...

  6. win7计算机记忆窗口,Win7系统关闭和打开搜索记忆功能的方法(图文教程)

    win7系统自带有搜索记忆功能,开启搜索记忆功能会记录下搜索的历史记录,这样很容易暴露隐私.那么Win7系统如何关闭搜索记忆功能?接下来系统城小编和大家分享Win7系统关闭和打开搜索记忆功能的方法. ...

  7. wps里的茶色字体怎么设置_《excel颜色筛选》 WPS2019的EXCEL整行填充一种颜色保存后关闭再打开就变成两种深浅不同的颜色是怎么回事呢?请大神帮忙解决...

    WPS2019的EXCEL整行填充一种颜色保存后关闭再打开就变成两种深浅不同的颜色是怎么回事呢?请大神帮忙解决 格式刷提取那个单元格格式复制后颜色,保存后打开也的吗? 还有你可以右键单元格后下两种的图 ...

  8. 父窗口控制子窗口的行为-打开,关闭,重定位,回复

    1,技术要点可以利用windows的open和closed来对子窗口的控制 应用领域:需要父窗口和子窗口之间进行互动. 代码如下: 代码  1 <!DOCTYPE html PUBLIC &qu ...

  9. 子窗口关闭,父窗口有选择刷新

    在父窗口中打开一个模式窗口,当模式窗口关闭的时候父窗口不刷新. 父窗口js代码 function addDiaocha()  {   var url = '${ctx}/admin/diaocha/e ...

  10. Vue/Angular中父窗口新开的子窗口关闭的时候刷新父窗口

    最近遇到一个项目需求:Angular中父窗口新开的子窗口提交完信息关闭的时候刷新父窗口. 知识点: window.opener 概述 返回打开当前窗口的那个窗口的引用,例如:在window A中打开了 ...

最新文章

  1. react native 常用学习或查资料网址
  2. IT公司100题-27-跳台阶问题
  3. android万年历有什么作用,基于android的万年历农历怎么算
  4. iOS逆向之iOSOpenDev
  5. JSP/SERVLET入门教程--Servlet 使用入门
  6. QT的QNdefFilter类的使用
  7. softirq/tasklet/workqueue的区别
  8. Visual Studio 2005 插件编程(代码行数统计插件)之一
  9. Linux 时间函数的使用
  10. linux 64位 可移植性,linux – #!/ bin / sh vs#!/ bin / bash,实现最大的可移植性
  11. Python+numpy实现蒙特卡罗方法估计圆周率近似值
  12. UVa 11636 - Hello World!
  13. 1.4.1 启动与销毁Activity
  14. 与Intel一较高下:个人纯手工打造CPU
  15. directx修复工具v3.2增强版_「电脑知识」USBOS 超级PE启动维护工具增强版及标准版...
  16. 马原复习思维导图-前三章
  17. 智齿科技宣布完成1亿美元D轮融资,暂未取得有效专利
  18. BLM模型:解决问题的前提是定义问题
  19. 华为防火墙 相关命令
  20. python + selenium + unittest 实现网站登录注册自动化测试

热门文章

  1. make编译安装_学习笔记
  2. 用MyEclipse将java文件转换成UML类图
  3. ubuntu16.04下怎么安装flash player
  4. 【转载】架构师的行为准则(三)
  5. HTTP method POST is not supported by this URL解决方案
  6. STC学习:红外通信1(收发单个字节)
  7. 简单网页-------课程表
  8. kettlejava脚本的api_kettle java api 执行 Kettle 的作业和 转换
  9. axios拦截器_Axios源码解析 —— 一个小而美的HttpClient
  10. python游戏源码回合制游戏_Python回合制小游戏对战程序