Lambda表达式&disconnect 函数断开信号连接

1.disconnect 函数来断开连接

有三种情况必须使用 disconnect() 函数:

[1].断开与某个对象相关联的任何对象。这似乎有点不可理解,事实上,当我们在某个对象中定义了一个或者多个信号,这些信号与另外若干个对象中的槽相关联,如果我们要切断这些关联的话,就可以利用这个方法,非常之简洁。

disconnect( myObject, 0, 0, 0 )

或者

 myObject->disconnect()

[2].断开与某个特定信号的任何关联。

disconnect( myObject, SIGNAL(mySignal()), 0, 0 )

或者

 myObject->disconnect( SIGNAL(mySignal()) )

[3].断开两个对象之间的关联。

disconnect( myObject, 0, myReceiver, 0 )

或者

 myObject->disconnect(  myReceiver )

在 disconnect 函数中 0 可以用作一个通配符,分别表示任何信号、任何接收对象、接收对象中的任何槽函数。但是发射者 sender 不能为 0,其它三个参数的值可以等于 0。

2.Lambda表达式

c11新特性中加入了lambda表达式,所以Qt 也支持

需在.pro文件中加入 CONFIG += c++11

Lambda表达式,实质就是一个匿名函数对象。我们先来复习一下C++的匿名函数。

[1].c++匿名函数

所谓匿名函数,就是没有名字的函数。其实类似于python中的lambda函数,C++中的匿名函数通常为:

[capture](parameters)->return-type{body}

注释:

capture

[]        //未定义变量.试图在Lambda内使用任何外部变量都是错误的.

[var]     //表示值传递方式捕捉变量var;

[=]      //表示值传递方式捕捉所有父作用域的变量(包括this);

[&var]   //表示引用传递捕捉变量var;

[&]      //表示引用传递方式捕捉所有父作用域的变量(包括this);

[this]    //表示值传递方式捕捉当前的this指针。

[x, &y]   //x 按值捕获, y 按引用捕获.

[&, x]    //x显式地按值捕获. 其它变量按引用捕获

[=, &z]   //z按引用捕获. 其它变量按值捕获

parameters:存储函数的参数

return-type:函数的返回值

body:函数体

举例:

#include<iostream>
void main()
{
	int Featurea = 7;
	int Featureb = 9;
	auto fun = [](size_t Featurea, size_t Featureb){return Featurea<Featureb ? Featurea : Featureb; };
	int i = fun(Featurea, Featureb);
	std::cout << i << std::endl;
}

[2].Lambda表达式:

但是此时传进来的值,只有可读权限,是不允许被修改的。Lambda函数总是一个const函数,mutable可以取消其常量性,就可以被修改了。

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值