信号和槽是 Qt 编程的一个重要部分。

  槽和普通的 c++成员函数很像。它们可以是虚函数(virtual),也可被重载(overload),可

以是公有的(public ),保护的( protective ),也可是私有的( private ),它们可以象任何 c++成员函数一样被调用,可以传递任何类型的参数。不同在于一个槽函数能和一个信号相连接,只

要信号发出了,这个槽函数就会自动被调用。

connect 函数语法如下:

connect(Obeject1, SIGNAL(signal), Obeject2, SLOT(slot));

Object1 和 Obeject2 是 QObject 对象指针, signal 和 slot 是不带参数的函数原型。 SIGNALE()

和 SLOT()宏的作用是把他们转换成字符串。

信号与槽的连接方式:

1、一个信号可以和另一个信号相连

connect(Obeject1, SIGNAL(signal1),Obeject2, SIGNAL(signal1);

表示信号1发射可以触发信号2发射。

2、一个信号可以连接到多个槽:

connect(Obeject1, SIGNAL(signal2),Obeject2, SLOT(slot2);

connect(Obeject1, SIGNAL(signal2),Obeject3,SLOT(slot1);

当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。

3、多个信号可以连接到一个槽

connect(Obeject1, SIGNAL(signal2), Obeject2, SLOT(slot2);

connect(Obeject3, SIGNAL(signal2),Obeject2, SLOT(slot2);

任何一个信号发出,槽函数都会执行。

4、连接可以被删除

disconnect(Object1, SIGNAL(signal1),Obeject2, SLOT(slot);

这个函数很少使用,一个对象删除后,Qt 自动删除这个对象的所有连接。

信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接:

connect(ftp, SIGNAL(rawCommandReply(int, const QString &)),this,SLOT(processReply(int,const QString &)));

如果信号里的参数个数多于槽函数的参数,多余的参数被忽略。

注意:Qt信号和槽机制不支持对模板的使用