【Qt】:信号与槽(二)

一.带参数的信号和槽

  1. Qt的信号和槽也⽀持带有参数,同时也可以⽀持重载.
  2. 此处我们要求,信号函数的参数列表要和对应连接的槽函数参数列表⼀致.(一致指的是类型一致,如果个数不一致,那么信号参数个数要比槽个数的参数多)
  3. 此时信号触发,调⽤到槽函数的时候,信号函数中的实参就能够被传递到槽函数的形参当中.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

前面提到信号的参数比槽的参数多,为什么要这样设置呢?这是因为槽和信号可以多对多绑定,如果我们严格要求参数一致,那么意味着信号绑定槽的要求更高了。换而言之,就是为了让槽和信号的绑定更加灵活。

二.信号与槽的多对多连接

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三.信号与槽的断开

使⽤disconnect即可完成断开.disconnect的⽤法和connect基本⼀致。但是该函数很少被使用,一般而言我们断开该信号的连接是为了与其它槽相连,除此之外基本connect后就不再管了。

创建两个按钮,第一个按钮改变标题,第二个按钮断开第一个按钮的连接,让第一个按纽改变另一个标题

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

四.lamda表达式定义槽函数

Qt5在Qt4的基础上提⾼了信号与槽的灵活性,允许使⽤任意函数作为槽函数。但如果想⽅便的编写槽函数,⽐如在编写函数时连函数名都不想定义,则可以通过Lambda表达式来达到这个⽬的。

Lambda表达式是C++11增加的特性。C++11中的Lambda表达式⽤于定义并创建匿名的函数对象,以简化编程⼯作。

在这里插入图片描述

在这里插入图片描述

lambda表达式不再多说,如果不了解,可以看我的博客c++11新特性部分。

说明:

  1. 由于使⽤引⽤⽅式捕获对象会有局部变量释放了⽽Lambda函数还没有被调⽤的情况。如果执⾏
    Lambda函数,那么引⽤传递⽅式捕获进来的局部变量的值不可预知。所以绝⼤多数场合使⽤的形式为: [=] () { }
  2. 早期版本的Qt,若要使⽤Lambda表达式,要在".pro"⽂件中添加: CONFIG += C++11 因为Lambda表达式是C++11标准提出的。Qt5以上的版本⽆需⼿动添加,在新建项⽬时会⾃动添加

在这里插入图片描述

在这里插入图片描述

问题

当我们在表达式里调用上层变量时,是无法成功的。

在这里插入图片描述

因为在c++里,lambda是一个回调函数,所以如果没对它进行参数捕获,它就无法调用其它函数里的变量。这里其实是c++的知识,也就不再多说了,不了解可以看我的博客c++11新特性部分。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸蛋挞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值