[Qt/C++]关于connect中使用lambda表达式“no matching function for call to...“的问题

*初学过程遇到的问题 如有理解错误的地方 欢迎大佬们指正

先说结论:

Qt5才支持在connect中使用Lambda表达式

 就是说 这种写法才可以

connect(this,&testMain::testsignal,[]{});

下边这样Qt4等老版本中connect的写法就会报错

connect(this,SIGNAL(testsignal()),[ ]{ });


下边是一些简单的笔记:

首先我们知道connect的基本格式

connect(sender, signal , receiver, slot);

其中信号和槽可以大致分为两种写法 以Http请求常用的请求结束信号举个栗子:

一种是写作函数地址的形式:

这种写法的优点在于 编译器会对信号和槽的参数类型进行检测

当信号或者槽有重载时 编译器会报错 需要使用函数指针来指向具体的某个函数

connect(baseManager,&QNetworkAccessManager::finished,this,&HttpBaseClientQObj::replyFinished);

另一种是Qt4及更早版本的写法:

这种写法可以直观的看到信号和槽中的参数类型

但缺点就是编译器不会对参数类型做出检测 就是说即使是参数不对应也不会报错

(新手就会产生一个想法:不报错还不好吗. 不报错只意味着程序语法的通过 而可能存在一些逻辑上隐藏的错误 直到代码运行出现异常 排查错误的时候才开始痛苦)

connect(baseManager,SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));

Lambda表达式

简单来讲 Lambda表达式就是有三种括号组成 中括号 大括号 小括号 [ ] { } ( )

在connect中甚至只用到中括号和大括号就可以

connect(this,&testMain::testsignal,[]{});

一些详细的教学 就在下边分享一下大佬们的帖子

函数指针、函数符与Lambda表达式:

​​​​​​https://www.cnblogs.com/coolcpp/p/cpp-fuction.html

在connect中使用lambda实现高效的信号/槽关联:

https://blog.csdn.net/cqk0100/article/details/77874142

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值