Bootstrap

一文带你真正理解connect(信号与槽机制)

提示:信号与槽机制是学习QT的第一步,也是重要的一步



一、什么是connect函数?

connect是连接信号和槽的一个重要函数,

connect的语法:connect(信号的发出者,发出的信号,信号的接收者,处理的槽函数)
connect函数的用法可以参照下图,举个简单的例子:人通过摩擦摩擦的动作,使得灯神出来,可以对照为按钮通过点击,然后窗口关闭。

在这里插入图片描述

二、使用步骤

1.使用QT内置的信号和槽函数

在QT中,许多控件有很多内置的信号和槽函数,例如,在QPushbutton这个控件中,可以在帮助文档中找到它的信号和槽
在这里插入图片描述

代码如下(示例):

//写一个简单的点击按钮关闭窗口
QPushButton*m_button = new QPushButton("关闭窗口",this);
connect(m_button,&QPushButton::clicked,this,&QWidget::close);
//clicked为内置的信号,close为内置的槽函数

2.自定义信号和槽函数

在新创建的类中,可以在这里自定义信号和槽函数
在这里插入图片描述
信号创建满足以下规则:
1.自定义信号写在signals下
2.返回值是void,只需要声明,不需要实现
3.可以有参数,可以发生重载

槽函数则满足以下规则:
1.可以有参数,可以发生重载
2.返回值是void,需要声明,也需要实现

代码如下(示例):

//创建好信号和槽,就可以使用了
student *m_student=new student(this);
connect(m_student,&student::hung,m_student,&student::shot);
emit m_student->hung();

这里的emit是调用我们创建的信号,调用信号后才启用槽函数。


3.自定义的信号与槽发生重载

在 Qt 中,信号和槽机制是一种强大的事件处理机制。当一个信号被发射时,与之关联的槽函数可以接收信号所携带的参数。

自定义的信号和槽发生重载在函数实现上本质无区别,主要是在调用时有变化。例如:在这里插入图片描述
在信号和槽重载了两个版本。正常来说使用connect函数是这样使用的
在这里插入图片描述
但这是错误的
要让编译器正常的找到函数的地址,就要使用函数指针,写法如下:


void(student:: *studentsignal)(QString)=&student::hung;
void(student:: *studentslot)(QString)=&student::shot;

connect(m_student,studentsignal,m_student,studentslot);
emit m_student->hung("哈哈哈");

这样就能正确使用重载版本了。

4 .信号可以连接信号

connect不只是只能信号连接槽函数 ,也能信号连接信号,大家可以自己测试

总结

以上是connect函数常见使用的细节

;