Qt有3种方式来实现信号与槽的关系
- ①使用connect、disconnect来关联/取消信号与槽
- ②在ui界面手动设置/关联
- ③使用emit、sender来实现自定义的信号与槽函数的关联
一、connect、disconnect关联
connect()函数
- 功能:用来将指定的信号与槽函数相关联,当信号发生时,自定执行槽函数
- connect()有多种参数形式
- 信号函数:只需要定义,不需要实现,没有实体。槽函数:响应函数,需要实现功能
- 信号函数与槽函数的参数必须一致(但如果信号函数与槽函数都是系统自带函数,则可以不相同)
形式一:
- 使用这种形式的connect()函数时:参数1(信号发射者),参数2(信号发射者的信号),参数3(信号接收者),参数4(执行的槽函数)
形式二:
- 对于具有默认参数的信号与槽,可以使用下面这种函数指针形式进行关联(当lineEdit的文本发生变化时,发生textChanged信号,窗口接收到信号之后,执行widget自定义的on_textChanged槽函数)
- 注意事项:当信号或槽函数没有重载时,可以省略参数(例如下面)。否则不能省略参数,编译会出错
disconnect()函数
- 功能:当使用connect将一个信号函数与槽函数关联之后,如果想要取消这种关联,就可以使用disconnect函数
- disconnect函数的参数与connect的参数相同
-
connect()的最后一个参数
二、在ui界面进行信号与槽函数的关联
①设置单个控件的槽函数
- 如果想要设置单个控件的槽函数,那么可以在ui界面对控件右击,选择一个信号函数,双击之后自动在代码中生成对应的槽函数
- 点击之后,在代码中自定生成槽函数
②关联2个控件之间的信号与槽函数
在ui界面,按下F4,鼠标左击进行关联,跳出对话框后,选择不同的功能
备注:这种方法的设置,在代码中不会有体现,不建议使用,不便于维护
三、使用emit来实现自定义的信号与槽函数的关联
方法:
- 在类中自定义信号函数
- 然后在适合的场所使用connect函数将自定义的信号函数与槽函数相关联
- 在特定的场景使用emit发射信号,发射信号之后就会执行connect函数关联的槽函数
备注:
- 信号函数必须是无返回值的函数,可以有参数。只需要定义不需要实现
- 自定义的槽函数返回值和参数没有限制
演示案例:
- 自定义信号函数,在类的signals分类下
- 自定义槽函数,在类的private slots分类下
- 使用connect将信号与槽函数关联(省略演示)
- 在特定的场景发射信号,那么就会执行上面的槽函数