一、当自定义信号和槽出现重载
1.如果函数中已经有了无参函数,再加有参函数时,需要重载,可以进行下面的定义:
void (Teacher **:: ***signal) (QString) = **&Teacher:😗*hungry
下面带参数的hungry函数直接用signal代替即可。
2.在有参函数调用时会发现 QString会被引号引起来,如果想消去引号可以采取下列措施:
先在QString后面加 .ToUtf8() 再加 .Data 变成**char ***
3.槽函数和信号类型要匹配,另外参数的个数可以不同,信号的个数可以多与槽函数的个数,但是槽函数的个数不可以比信号的个数多。
二、Lambda表达式
Lambda表达式用于定义并创建匿名的函数对象
形式: { }
中括号里放的符号不同传递的意义不同
"="进行的值传递 ={ }
“&”进行的引用传递 &{ }
中括号里还可以填this、a、&a等,最常用的还是填**=,进行值传递。
{ }里面存的是实现体,即函数体。
进行值传递时,mutable可以修饰值传递变量,可以修改拷贝出的数据,但是改变不了本体。
如果需要把值进行返回,形式为 ->int{ }**
三、Q4版本中对于槽函数的写法
Q4版本中对于槽函数的写法,尤其是面对函数重载时,当有参数时:
connect(信号的发送者,发送的信号SIGNAL(信号),信号接收者,槽函数SLOT(槽函数) )
优点:参数直观
缺点:编译器不会检测参数的类型