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可以取消其常量性,就可以被修改了。