今天遇到一个奇葩问题,就明明自定义信号只触发一次,然后槽函数却执行多次。今天和同事联调一个程序,期间解决了不少bug。但是调到最后发现,信号触发一次。结果槽函数执行多次。找了半天不知道啥原因。
看下我写的信号槽:

connect(m_pUpdateRackDialog, &EP_Dialog::sSnedClose, this, &EP_UpdateFirmWare::onResetAllUpdateValue);connect(this, &EP_UpdateFirmWare::sSendRackVersion, m_pUpdateRackWgt, &EP_UpdateRackWgt::onReceiverRackVersion);connect(this, &EP_UpdateFirmWare::sSendRackFrame, m_pUpdateRackWgt, &EP_UpdateRackWgt::onReceiverRackFrame);connect(this, &EP_UpdateFirmWare::sSendRackFinished, m_pUpdateRackWgt, &EP_UpdateRackWgt::onReceiverRackFinished);connect(this, &EP_UpdateFirmWare::sSendRackStatus, m_pUpdateRackWgt, &EP_UpdateRackWgt::onReceiverRackStatus);connect(m_pUpdateRackWgt, &EP_UpdateRackWgt::sSendUIValue, this, &EP_UpdateFirmWare::onSetRackValue);connect(m_pUpdateRackWgt, &EP_UpdateRackWgt::sSendUpdateFailed, this, &EP_UpdateFirmWare::onSetRackFailed);connect(m_pUpdateRackWgt, &EP_UpdateRackWgt::sSendMaxUIValue, this, &EP_UpdateFirmWare::onSetRackMaxValue);

由于项目需要我是要频繁创建这个窗体的。这里就产生了一个bug,qt的信号和槽是创建在多线程里面的。所以,即使我在关闭窗口的时候做了释放,但是信号槽依然存在。当你下次在打开窗体,它又会创建一个同样的信号和槽,最终导致执行多次槽函数。
解决方案:使用disconnect
在关闭窗体的时候将所有的信号和槽释放
代码如下:

disconnect(m_pUpdateRackDialog, &EP_Dialog::sSnedClose, this, &EP_UpdateFirmWare::onResetAllUpdateValue);disconnect(this, &EP_UpdateFirmWare::sSendRackVersion, m_pUpdateRackWgt, &EP_UpdateRackWgt::onReceiverRackVersion);disconnect(this, &EP_UpdateFirmWare::sSendRackFrame, m_pUpdateRackWgt, &EP_UpdateRackWgt::onReceiverRackFrame);disconnect(this, &EP_UpdateFirmWare::sSendRackFinished, m_pUpdateRackWgt, &EP_UpdateRackWgt::onReceiverRackFinished);disconnect(this, &EP_UpdateFirmWare::sSendRackStatus, m_pUpdateRackWgt, &EP_UpdateRackWgt::onReceiverRackStatus);disconnect(m_pUpdateRackWgt, &EP_UpdateRackWgt::sSendUIValue, this, &EP_UpdateFirmWare::onSetRackValue);disconnect(m_pUpdateRackWgt, &EP_UpdateRackWgt::sSendUpdateFailed, this, &EP_UpdateFirmWare::onSetRackFailed);disconnect(m_pUpdateRackWgt, &EP_UpdateRackWgt::sSendMaxUIValue, this, &EP_UpdateFirmWare::onSetRackMaxValue);

这样的话,每次新建窗体就创建信号槽,关闭窗体就释放信号和槽。保证槽函数只执行一次

qt信号槽踩坑日记(信号执行一次,槽函数执行多次解决方案)相关推荐

  1. 全志哪吒D1-H Tina Linux Ubuntu 22.04入门踩坑日记

    哪吒D1-H Tina Linux入门踩坑日记 系统环境 源码编译 mklibs-readelf的C++标准问题 m4的SIGSTKSZ问题 libfakeroot的_STAT_VER问题 read_ ...

  2. Win11 + Ubuntu18.04 双系统踩坑日记

    Win11 + Ubuntu18.04 双系统踩坑日记 前言 准备工作 硬件配置 镜像下载 Win11镜像下载 Ubuntu镜像下载 启动盘准备 Win11启动盘 Ubuntu启动盘 Win11安装 ...

  3. 【Flutter混合开发踩坑日记之‘applicationVariants‘ for extension ‘android‘】

    Flutter混合开发踩坑日记之'applicationVariants' for extension 'android' 正文 坑一:Could not get unknown property ' ...

  4. Swarm-BZZ踩坑日记之 如何让METMASK小狐狸显示gbzz

    刚入门bzz的新手还不知道小狐狸是什么的请移步上一章节:Swarm-BZZ踩坑日记之 如何在METMASK小狐狸导入节点地址 在浏览器安装好小狐狸,并添加自己的钱包地址后 会发现只显示ETH,并不显示 ...

  5. ReactNative 在丁香医生项目中引入的踩坑日记

    ReactNative 在丁香医生项目中引入的踩坑日记 this没绑定到函数导致空指针 参考 React-Native 踩坑第二弹-undefined is not a function(evalua ...

  6. springboot踩坑日记—nacos: Error watching Nacos Service change

    springboot踩坑日记-nacos: Error watching Nacos Service change Spring Boot :: (v2.1.5.RELEASE) 错误代码: 07-3 ...

  7. 微信小程序踩坑日记-微信小程序首次加载样式错乱问题

    微信小程序踩坑日记-微信小程序首次加载样式错乱问题 在实际开发项目中,遇到了个棘手的问题,就是在某些因素下,进入小程序发现有些样式发生偏移.错乱等问题 问题原因:-未知(估计是组件的问题) ↓ 解决办 ...

  8. c++字符串操作之std::ostringstream踩坑日记

    c++字符串操作之std::ostringstream踩坑日记 在开发过程中经常会遇到字符串操作,而std::string又没有format操作,这就很难受了. 于是我找到了std::ostrings ...

  9. Antd Pro V4 protable详解(ps:踩坑日记)

    Antd Pro V4 protable详解(ps:踩坑日记) 写在前面: 在这篇文章中,你会了解到: protable 中的cloumns属性详解 protable数据加载和处理(两种方法,直接使用 ...

  10. midjourney指令笔记+踩坑日记+gpt论文润色指令

    跟人拼团入手了midjourney,长期记录更新. midjourney指令笔记+踩坑日记 指令笔记 踩坑日记 GPT论文润色指令 指令一 指令二 指令三 指令四 指令五 指令笔记 关键词参考网址:p ...

最新文章

  1. php选取远程文件到本地,PHP实现的一个保存远程文件到本地的函数分享
  2. c#_可扩展标记语言XML
  3. 数据分析师常用的十种数据分析思路,你都知道吗?
  4. Lite-HRNet
  5. 烂泥:文件服务器搭建与使用详解,minio文件服务器搭建(单机版)
  6. centos普通用户修改文件权限_用户管理(特殊权限、特殊属性、umask 默认权限 )
  7. 如何使用Swift Playgrounds制作东西
  8. python网络验证系统_python3+django2 开发易语言网络验证(下)
  9. 压力测试过程中MySQL服务CPU占用率过高的问题排查思路
  10. 开发常用在线协作工具推荐
  11. 图像目标检测识别,计算物体个数,针对电子元器件计算
  12. keil出现同一个宏定义赋值在多个文件中结果不一致问题
  13. google-hacking
  14. 产品设计--七大定律
  15. 力扣算法题-19.秋叶收藏集 C语言实现
  16. Mysql海量数据分页查询优化
  17. 支付宝付款页面html,支付页面.html
  18. mysql 部门名称递归_部门子部门表结构,递归指定部门的所有子部门SQL函数
  19. 从《羞羞的铁拳》中嗅到的
  20. 线索化二叉树的学习记录

热门文章

  1. element-ui自定义手机号的验证
  2. vue脚手架的自定义配置
  3. html 单选框_HTML
  4. 两个乒乓球队进行比赛 各出3人c语言_19年国际乒乓球大赛时间出炉:比赛的密集程度令人窒息!...
  5. python类型转换方法_Numpy数据类型转换astype,dtype的方法
  6. c 自定义实现string类 clear_JVM类加载器是否可以加载自定义的String
  7. Introduction to Computer Networking学习笔记(十六):Queue Model 包交换中的缓冲模型
  8. mysql web报表_2021最新流行的Web报表工具推荐
  9. html可视区高度,你真的懂js获取可视区宽高吗
  10. Git(10):删除远端仓库中多余文件(**.iml/target文件)