在度娘参阅了各大博客,都没有找的这个问题的解决方案,要么就是解决办法是错误的。最后还是在stackoverflow中找到的。难道就我一个人遇到过这个问题吗。。。

问题描述

国内博客普遍认为,像以下这种信号槽连接,是可以直接调用disconnect()函数来取消连接的:

QTimer* tm = new QTimer(this);
connect(tm, &QTimer::timeout, this, [=]()
{qDebug()<<"fuck";tm->disconnect();
});

然而,经过测试,这种办法是完全错误的,调用disconnect()后,触发timeout后还是会输出"fuck",如果多次调用这串代码,会创建更多的连接,而且这些连接是无法被捕获的,类似于申请了一块内存空间,而没有用指针指向它。
经过分析,我认为disconnect()函数只能销毁代码中定义的命名函数,而对于匿名函数是无能为力的,需要我们自己去解除连接。所以,我们需要注意到connect()的返回值,利用该返回值来定位对应的连接。

解决办法

QTimer* tm = new QTimer(this);
auto conn = std::make_shared<QMetaObject::Connection>();
*conn = connect(tm, &QTimer::timeout, this, [=]()
{qDebug()<<"fuck";disconnect(*conn);
});

参考:

https://stackoverflow.com/questions/14828678/disconnecting-lambda-functions-in-qt5

匿名函数的disconnect方法 QTimer如何disconnect匿名函数相关推荐

  1. python字符串函数的find方法_Python string模块 字符串函数方法操作教程

    我们在Python编程过程中,经常会处理一些字符串的相关操作,例如:查找.替换.分隔.截取以及英文的大小写转换等,这个时候Python程序员首选的一定是 string模块 . 一.string模块简单 ...

  2. java sql sum函数的使用方法,Springboot jpa使用sum()函数返回结果如何接收

    1.需求 我的需求是统计域名以及域名出现的次数. 之前使用springboot jpa都是把数据库中的表跟实体类绑定,创建继承JpaRepository的接口.如下: @Repository publ ...

  3. excel中vlookup函数的使用方法_EXCEL中查找匹配函数VLOOKUP使用技巧

    1.VLOOKUP基础用法 VLOOKUP 函数表示: = VLOOKUP (你想要查找的内容,要查找的位置,包含要返回的值的区域中的列号,返回近似或精确匹配-表示为 1/TRUE 或 0/假). 第 ...

  4. python字符串函数的使用方法_python字符串的操作函数

    --------------S.upper() #S中的字母大写 -------------S.lower() #S中的字母小写 S.casefold#S中的字符小写方法(2) S.capitaliz ...

  5. python中sum函数的使用方法及实例_python求和函数sum()的使用示例

    python求和函数sum()的使用示例 发布时间:2020-11-21 11:59:04 来源:亿速云 阅读:59 作者:小新 小编给大家分享一下python求和函数sum()的使用示例,相信大部分 ...

  6. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法...

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

  7. 计算机中函数counta表示,excel中counta函数的使用方法

    你还在为Excel中counta函数的使用方法而苦恼吗,今天小编教你Excel中counta函数的使用方法,今天,学习啦小编就教大家在counta函数的使用方法. Excel的counta函数的使用方 ...

  8. matlab round函数怎么用,round函数的使用方法【处理模式】

    近日有不少小伙伴咨询这样一个情况,就是在使用时遇到了round函数的使用方法 的问题,round函数的使用方法 虽然不是大问题,但round函数的使用方法 的问题会导致无法正常工作,那该怎么处理呢,下 ...

  9. input()函数的使用方法

    关键词:input()函数 摘要:input()函数的使用方法 目录 一.input()函数输入机制与强制转换 二.input()函数的提示项 三.一次性输入多个变量值 一.input()函数输入机制 ...

最新文章

  1. Spring知识点提炼
  2. luoguP1354房间最短路问题
  3. 十大滤波算法程序大全
  4. c#实现Socket网络编程
  5. 计算机专业比重点线高40多分,这3所211大学,超过一本线40分就可报考,性价比高,值得报考...
  6. 北方网-ios预科班
  7. c++用什么软件编程_学习编程用什么做笔记比较好?
  8. 不想打造物联网的制造型企业不是一家合格的百年老店
  9. kotlin学习笔记-异常好玩的list集合总结
  10. Linux平台驱动分析
  11. zk不同页面之间的即时刷新
  12. oracle 快速入门之第一章 数据库基础
  13. 人民币兑换、换硬币 C语言
  14. 情商高手比智商高手要可怕多了
  15. 学计算机的怎样分析TCGA数据库,开启数据挖掘之门:TCGA数据库入门必看!
  16. 缓和曲线与原曲线任意点坐标计算程序
  17. 国科大学习资料--最优化计算方法(王晓)--期末考试试卷2
  18. 【编程】工具 - Compuware 全套产品的许可文件(License.xml)
  19. SSM毕设项目学生社团管理系统pyl5z(java+VUE+Mybatis+Maven+Mysql)
  20. Spark-MLlib 学习入门到掌握-DecisionTreeClassifier决策树分类器[19]

热门文章

  1. 前端 google maps 地理编码(geocode),模糊搜索(search)
  2. XSS Challenges/刷题/Stage #3
  3. 伦敦大学计算机图形学博士,GAMES Webinar 2018 -73期(Siggraph Asia 2018论文报告)| 王杨抟风(伦敦大学学院),李昌健(香港大学)...
  4. JAVA——取输入范围在1-999内数字最大值,可自动排除无关项
  5. 重庆自考2022报名注意事项
  6. SeaJS之use函数
  7. mysql unique index 允许为null
  8. 301 Moved Permanently问题排查与解决
  9. winhex 更改图片的宽和高
  10. 杭州c语言开发招聘,杭州招银网络科技