一、信号与槽的概念
信号是在特定情况下被发射的通知;槽是对信号进行响应的函数,槽就是函数,所以也称为槽函数。
信号与槽关联是用函数QObject::connect()实现的,使用函数connect()的基本格式如下:
QObject::connnect(sender,SIGNAL(signal()),receiver,SLOT(slot()));
connect()是QObject类的一个基类,而QObject是大部分Qt类的基类,所以在实际调用时,可以忽略前面的限定符部分,所以可以直接写为:
connnect(sender,SIGNAL(signal()),receiver,SLOT(slot()));
其中sender是发射信号的对象的名称,signal()是信号,信号可以看作是特殊的函数,需要带有括号,有参数时还需要指明各参数类型,receiver是接收信号的对象的名称,slot()是槽函数,需要带有括号,有参数时还需要指明各参数的类型。
SIGNAL和SLOT是Qt的宏,分别用于指明信号和槽函数,并将它们的参数转换为相应的字符串。
关于信号与槽的使用,有以下一些规则需要注意:
(1)一个信号可以连接多个槽函数;
当一个信号与多个槽函数关联时,槽函数按照建立连接时的顺序依次运行;
当信号与槽函数带有参数时,在函数connect()里要指明各参数的类型,但不用指明参数名称,例如有:
connect(spinNum,SIGNAL(valueChang(int)),this,SIOT(addFun(int)));
connect(spinNum,SIGNAL(valueChang(int)),this,SIOT(updateStatus(int)));
(2)多个信号可以连接同一个槽函数;
例如有:
connect(ui->redioBlack,SIGNAL(clicked()),this,SIOT(addFun(int)));
connect(ui->redioRed,SIGNAL(clicked()),this,SIOT(addFun(int)));
connect(ui->redioBlue,SIGNAL(clicked()),this,SIOT(addFun(int)));
(3)一个信号可以连接