QT学习(2)
信号和槽机制
Qt提供了信号和槽机制用于完成界面操作的响应,信号和槽机制使完成任意两个Qt对象之间的通信机制。信号会在某个特定情况或动作下被触发,槽是等同于接收并处理信号的函数。例如,若要将一个窗口部件的变化情况通知给另一个窗口部件,则一个窗口部件发送信号,另一个窗口部件的槽接收此信号并进行相应的操作,即可实现两个窗口部件之间的通信。每个Qt对象都包含若干个预定义的信号和若干个预定义的槽。当某一个特定事件发生时,一个信号被发送,与信号相关联的槽则会响应信号并完成相应的处理。当一个类被继承时,该类的信号和槽也同时被继承,也可以根据需要自定义信号和槽。
信号与槽机制的连接方式
(1)一个信号可以与另一个信号相连
//Object1的信号1发送可以触发Object2的信号1发送
connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1))
(2)同一个信号可以与多个槽相连
connect(Object1,SIGNAL(signal2),Object2,SLOT(slot2));
connect(Object1,SIGNAL(signal2),Object3,SLOT(slot1));
(3)同一个槽可以响应多个信号
connect(Object1,SIGNAL(signal2),Object3,SLOT(slot2));
connect(Object2,SIGNAL(signal2),Object3,SLOT(slot2));
常用的连接方式为:
connect(Object1,SIGNAL(signal),Object2,SLOT(slot));
SIGNAL()和SLOT()时Qt定义的两个宏,它们返回其参数的C语言风格的字符串(const char*)。因此,下面关联信号和槽的两个语句是等同的:
connect(button,SIGNAL(clicked()),this,SLOT(showArea()));
connect(button,"clicked()",this,"showArea()");
注:
需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数与接收该信号的槽的参数类型和参数个数应相同。特殊情况,槽的参数个数是可以少于信号的参数个数,但缺少的参数必须是信号参数的最后一个或几个参数。如果信号和槽的签名不符合,编译器会报错。