connect(sender, SIGNAL(signal), receiver, SLOT(slot)); //其中 sender 与 receiver 是指向对象的指针,SIGNAL() 与 SLOT() 是转换信号与槽的宏。
(1)类型安全。须要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数同接收该信号的槽的参数类型和参数个数相同。不过,一个槽的参数个数是能够少于信号的参数个数的,但缺乏的参数必须是信号参数的最后一个或几个参数。若是信号和槽的签名不符,编译器就会报错。
(2)松散耦合。信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无需知道是哪一个对象的哪一个槽须要接收它发出的信号,它只需在适当的时间发送适当的信号就能够了,而不须要知道也不关心它的信号有没有被接收到,更不须要知道是哪一个对象的哪一个槽收到了信号。一样的,对象的槽也不知道是哪些信号关联了本身,而一旦关联信号和槽,Qt就保证了适合的槽获得了调用。即便关联的对象在运行时被删除,应用程序也不会崩溃。
(3)信号和槽机制加强了对象间通讯的灵活性。一个信号能够关联多个槽,也能够多个信号关联一个槽。安全
同回调函数相比,信号和槽机制运行速度有些慢。经过传递一个信号来调用槽函数将会比直接调用非虚函数运行速度慢10倍。缘由以下:
(1)须要定位接收信号的对象;
(2)安全地遍历全部的关联(如一个信号关联多个槽的状况);
(3)编组/解组传递的参数;
(4)多线程的时候,信号可能须要排队等待。
然而,与建立对象的new操做及删除对象的delete操做相比,信号和槽的运行代价只是他们不多的一部分。信号和槽机制致使的这点性能损耗,对实时应用程序是能够忽略的。多线程
能够经过connect的第五个参数进行控制信号槽执行时所在的线程函数
connect有几种链接方式,直接链接和队列链接、自动链接性能
直接链接:信号槽在信号发出者所在的线程中执行线程
队列链接:信号在信号发出者所在的线程中执行,槽函数在信号接收者所在的线程中执行指针
自动链接:多线程时为队列链接函数,单线程时为直接链接函数。code