标题:信号与槽机制
http://www.devbean.net/2012/08/qt-study-road-2-catelog/这里有比较好的入门教程
1信号与槽的基本概念
Qt提供了信号与槽机制用于完成界面的响应操作,是完成任意两个Qt对象之间的通信机制。其中,信号会在某个特定的情况下或动作下被触发,槽等同于接收并处理信号函数。
2信号的声明
信号的声明是在头文件中进行的,QT的关键词指出进入信号声明区,随后即可声明自己的信号。如:
signals:
voidmySignal();
voidmySignal(int x);
voidmySignal(int x,int y);
信号的返回值都是void,所以没有返回值。
3槽的声明
槽是普通的成员函数,唯一特殊的就是它可以与信号相关联。与其关联的信号发射,与其相关的槽就会被调用。
槽的声明也是在头文件中进行的。
Public slots:
VoidmySlot();
VoidmySlot(intx);
VoidmySlot(intx,int y);
4.信号与槽机制的连接方式
(一)一个对象的信号与另一个对象的槽相连
connect(object1,SIGNAL(signal1),object2,SLOT(slot));//表示object1的signal1发射就可以触发object2的槽slot
(二)一个信号与另一个信号相连
connect(object1,SIGNAL(signal1),object2, SIGNAL(signal1);//表示object1的signal1发射就可以触发object2的signal1发射
(三)同一个信号可以与多个槽相连
connect(object1,SIGNAL(signal1),object2,SLOT(slot1));
connect(object1,SIGNAL(signal1),object2,SLOT(slot2));
(四)同一个槽可以响应多个信号
connect(object1,SIGNAL(signal1),object2,SLOT(slot));
connect(object2,SIGNAL(signal1),object2,SLOT(slot));
5应该注意的问题
信号与槽的效率是非常高的,但是同真正的回调函数比起来,由于增加了灵活性,所以在速度上还是有所损失,如果要追求高效率的话,就尽量减少使用这种机制。
信号与槽机制与普通的函数调用一样,如果使用的不恰当的话,在程序执行也有可能造成死循环。因此,在定义槽函数时一定要注意避免形成无线循环,即在槽中再发收所接收到的同样信号,防止形成死循环。
如果一个信号与多个槽相连接的话,那么当这个信号被发射时,与之相关联的槽被激活的顺序是随机的。
宏定义不能用在signal和slot的参数中,因为moc不具有扩展宏定义的功能。