转自(稍作修改):http://devbean.blog.51cto.com/448512/193918
信号/槽机制
信号槽机制是Qt编程的基础。通过信号槽,能够使Qt各组件在不知道对方的情形下能够相互通讯。这就将类之间的关系做了最大程度的解耦。
槽函数和普通的C++成员函数没有很大的区别。如果要说区别,那就是,槽函数可以和一个信号相连接,当这个信号发生时,它可以被自动调用。
connect语句
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
sender和receiver都是QObject类型的,singal和slot都是没有参数名称的函数签名。SINGAL()和SLOT()宏用于把参数转换成字符串。
- 一个信号可以和多个槽相连:槽会一个接一个的被调用,但是它们的调用顺序是不确定的.
- 多个信号可以连接到一个槽:只要任意一个信号发出,这个槽就会被调用。
- 一个信号可以连接到另外的一个信号:当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形式和信号-槽的形式没有什么区别。
- 槽可以被取消链接:
disconnect()
,这种情况并不经常出现,因为当一个对象delete之后,Qt自动取消所有连接到这个对象上面的槽。 - 为了正确的连接信号槽,信号和槽的参数个数、类型以及出现的顺序都必须相同;
如果信号的参数多于槽的参数,那么这个参数之后的那些参数都会被忽略掉, - 只要我们继承QObject类,就可以使用信号槽机制。