1.最方便的方法就是使用UI设计直接将object转到槽,然后选择促发信号类型以及设计槽函数的内容,完成对应的业务。在对应的区域比如该类的构造函数中调用connect(&sender,&signal,&receiver,&slot),关联上部件和信号与槽函数。
2.当然遇到需要自定义信号的情景,需要手动写Signal:关键词修饰自己写的自定义信号,在QT5可以不加public(访问权限) Slot:修饰槽函数,但在QT4版本需要的。加上修饰词倒也可以更加直观找到槽函数,此外信号和槽函数都是没有返回值的,槽函数对应信号来设计函数,信号是一个没有返回值的函数,只有声明,没有实现过程。槽函数是有实现过程。
3.在QT4中connect()Signal和Slot都是使用宏SIGNAL(XXX)以及SLOT(XXX),优点在于可以对应补全,缺点在编译时候转换成字符串不具备检查功能,若是有错误往往是运行时候才能看出来。
4.关于有多个重载信号和重载槽函数,为了避免二义性需要使用函数指针,注意信号的参数和槽函数的参数应当一致对应。无论是参数的个数顺序和类型。
5.在槽函数比较简单的情况下,减少繁杂的槽函数定义和对应实现的设计,可以化繁为简使用lambda表达式,但是在PRO中需要添加CONFIG+= C++11 才能正确使用表达式 该表达式的使用方法以及语法格式如下:
[ 【=,this,&】]()【mutable】
{
} 此处【】表示可选内容。= (外部所有局部变量,包括类内的成员等等以值read_only只读传递传进来配合mutable便可改)
this(类中所有成员值传递方式) &(把外部所有局部变量引用方式传递,但是不推荐容易内存上出现问题)
mutable (表示可变)
最后connect(&sender,&signal,const char * method)也是connect多个重载函数中的一个,参数只有三个。