提示:信号与槽机制是学习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函数常见使用的细节