信号(signal)
信号是由对象改变状态后发射(emit)出去的事件,例如:一个pushButton(对象),最常见的就是鼠标点击,单击的这个动作就会产生一个clicked()信号,使信号发射出去。
注意:对象只是负责发送信号,但它并不知道由谁来接收这个信号,这样就做到了对象的信息封装。
槽(slot)
槽是用来接收信号的,是一个普通的对象成员函数,当槽与信号关联的时候,信号被发射,关联的槽函数就自动被执行。
槽函数的命名格式
void on_对象名_信号名(参数);
信号与槽的关联
通过Qobject的connect()成员函数来实现。
connect(sender,SIGNAL(signal),resiver,SLOT(slot));
connect(A,B,C,D);
-
sender和resiver是指向该对象的指针,即发送信号对象和接收信号对象
-
SIGNAL()转换信号与SLOT()槽是QT的宏
-
当对象A发送B信号的时候,就会触发C的槽函数D
注意:信号与槽都是char*字符串类型,两个类型必须一致
特点:
- 一个信号可以连接多个槽,按连接时的顺序执行
- 多个信号也可以连接同一个槽
- 信号与信号也是可以相连的
注意:
1.信号与槽的参数个数类型必须一致
2.信号与槽函数是没有返回值的
3.当信号关联所有的槽函数执行完毕后固化,才会执行后面的代码
4.必须在类中定义Q_OBJECT
5.槽函数与信号的声明必须放在setupUI之后
实例1–自动关联
这里我们采用的是自动关联信号与槽的方式,也可以进行手动关联信号与槽
我们创建一个带ui界面的项目,用的widget,点击ui界面选择PushButton的控制器,拖拽到ui界面里面
右键点击转到槽
这里我们选择第一个信号,然后点击确定,就会自动转到该信号的槽函数
在头文件查看,类中定义Q_OBJECT,且有槽函数的声明
运行效果:
实例2–手动关联
我们依然使用Push Button来举例子
依然是把控制器件拖拽到ui界面上,然后我们在相应的头文件中,添加自己声明的槽函数
最后也能实现相应的功能。