qt信号槽踩坑日记(信号执行一次,槽函数执行多次解决方案)
今天遇到一个奇葩问题,就明明自定义信号只触发一次,然后槽函数却执行多次。今天和同事联调一个程序,期间解决了不少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信号槽踩坑日记(信号执行一次,槽函数执行多次解决方案)相关推荐
- 全志哪吒D1-H Tina Linux Ubuntu 22.04入门踩坑日记
哪吒D1-H Tina Linux入门踩坑日记 系统环境 源码编译 mklibs-readelf的C++标准问题 m4的SIGSTKSZ问题 libfakeroot的_STAT_VER问题 read_ ...
- Win11 + Ubuntu18.04 双系统踩坑日记
Win11 + Ubuntu18.04 双系统踩坑日记 前言 准备工作 硬件配置 镜像下载 Win11镜像下载 Ubuntu镜像下载 启动盘准备 Win11启动盘 Ubuntu启动盘 Win11安装 ...
- 【Flutter混合开发踩坑日记之‘applicationVariants‘ for extension ‘android‘】
Flutter混合开发踩坑日记之'applicationVariants' for extension 'android' 正文 坑一:Could not get unknown property ' ...
- Swarm-BZZ踩坑日记之 如何让METMASK小狐狸显示gbzz
刚入门bzz的新手还不知道小狐狸是什么的请移步上一章节:Swarm-BZZ踩坑日记之 如何在METMASK小狐狸导入节点地址 在浏览器安装好小狐狸,并添加自己的钱包地址后 会发现只显示ETH,并不显示 ...
- ReactNative 在丁香医生项目中引入的踩坑日记
ReactNative 在丁香医生项目中引入的踩坑日记 this没绑定到函数导致空指针 参考 React-Native 踩坑第二弹-undefined is not a function(evalua ...
- springboot踩坑日记—nacos: Error watching Nacos Service change
springboot踩坑日记-nacos: Error watching Nacos Service change Spring Boot :: (v2.1.5.RELEASE) 错误代码: 07-3 ...
- 微信小程序踩坑日记-微信小程序首次加载样式错乱问题
微信小程序踩坑日记-微信小程序首次加载样式错乱问题 在实际开发项目中,遇到了个棘手的问题,就是在某些因素下,进入小程序发现有些样式发生偏移.错乱等问题 问题原因:-未知(估计是组件的问题) ↓ 解决办 ...
- c++字符串操作之std::ostringstream踩坑日记
c++字符串操作之std::ostringstream踩坑日记 在开发过程中经常会遇到字符串操作,而std::string又没有format操作,这就很难受了. 于是我找到了std::ostrings ...
- Antd Pro V4 protable详解(ps:踩坑日记)
Antd Pro V4 protable详解(ps:踩坑日记) 写在前面: 在这篇文章中,你会了解到: protable 中的cloumns属性详解 protable数据加载和处理(两种方法,直接使用 ...
- midjourney指令笔记+踩坑日记+gpt论文润色指令
跟人拼团入手了midjourney,长期记录更新. midjourney指令笔记+踩坑日记 指令笔记 踩坑日记 GPT论文润色指令 指令一 指令二 指令三 指令四 指令五 指令笔记 关键词参考网址:p ...
最新文章
- php选取远程文件到本地,PHP实现的一个保存远程文件到本地的函数分享
- c#_可扩展标记语言XML
- 数据分析师常用的十种数据分析思路,你都知道吗?
- Lite-HRNet
- 烂泥:文件服务器搭建与使用详解,minio文件服务器搭建(单机版)
- centos普通用户修改文件权限_用户管理(特殊权限、特殊属性、umask 默认权限 )
- 如何使用Swift Playgrounds制作东西
- python网络验证系统_python3+django2 开发易语言网络验证(下)
- 压力测试过程中MySQL服务CPU占用率过高的问题排查思路
- 开发常用在线协作工具推荐
- 图像目标检测识别,计算物体个数,针对电子元器件计算
- keil出现同一个宏定义赋值在多个文件中结果不一致问题
- google-hacking
- 产品设计--七大定律
- 力扣算法题-19.秋叶收藏集 C语言实现
- Mysql海量数据分页查询优化
- 支付宝付款页面html,支付页面.html
- mysql 部门名称递归_部门子部门表结构,递归指定部门的所有子部门SQL函数
- 从《羞羞的铁拳》中嗅到的
- 线索化二叉树的学习记录
热门文章
- element-ui自定义手机号的验证
- vue脚手架的自定义配置
- html 单选框_HTML
- 两个乒乓球队进行比赛 各出3人c语言_19年国际乒乓球大赛时间出炉:比赛的密集程度令人窒息!...
- python类型转换方法_Numpy数据类型转换astype,dtype的方法
- c 自定义实现string类 clear_JVM类加载器是否可以加载自定义的String
- Introduction to Computer Networking学习笔记(十六):Queue Model 包交换中的缓冲模型
- mysql web报表_2021最新流行的Web报表工具推荐
- html可视区高度,你真的懂js获取可视区宽高吗
- Git(10):删除远端仓库中多余文件(**.iml/target文件)