QT入门——信号,槽,lambda表达式
·
QT入门——信号,槽,lambda表达式
信号和槽理解
信号和槽可以理解为,两个人之间的通信。
- 发出者,发出信号
- 接受者根据信号做出一些行为,行为写在槽函数里面
- 信号和槽通过connect进行连接
当点击按钮btn2时会执行关闭当前窗口的操作(connect里面传的4个参数都是指针)
connect(btn2,&QPushButton::clicked,this,&QWidget::close);
自定义信号
在QT里面声明一个类的时候,会自带一个signals,我们只需要把要定义信号申明到类中即可,不需要写实现(信号不需要动作)

自定义槽函数
我们可以自定义一个槽函数来执行我们接收到信号之后的一些操作。槽函数直接定义到接受者的中的public权限中,并需要在.cpp文件中实现槽函数。
槽函数在.h文件中的申明

槽函数在.cpp文件中的实现。

信号与槽函数之间的连接
信号与槽函数无参情况下
这种写法仅仅适合,信号与槽函数都是无参的情况,但是信号与槽函数是支持重载的,如果重载一个有参的信号或者槽函数,编译器就不知道要调用哪个型号或者槽函数了。
connect(wh,&teacher::hungry,stu,&student::treat);
信号与槽函数有参情况下(无参也推荐这种写法)
我们可以定义一个函数指针,指向指定的函数地址
当前例子为两个空参函数,如果函数是有参修改括号里面的void即可
//函数指针 指向地址
void (teacher::*teacherSignal)(void)=&teacher::hungry;
void (student::*studentSlot)(void)=&student::treat;
//信号槽连接
connect(wh,teacherSignal,stu,studentSlot);
有参的信号和槽函数,只需要把括号里面的内容修改成参数的数据类型即可
void (teacher::*teacherSignal)(QString)=&teacher::hungry;
void (student::*studentSlot)(QString)=&student::treat;
信号与槽函数的注意事项
- 信号与槽函数连接时对他们两个的参数是有限制的
- 信号的参数可以多余槽的参数,但是槽函数有的参数,信号必须得有
- 简而言之,槽有的信号一定得有,信号有的槽可以没有
lambda表达式
- 使用lambda表达式可以在写槽函数的时候直接使用匿名函数
- lambda表达式的格式——{}
- []里面放=代表值传递 ,放&代表地址传递 捕获内容是当前对象
- ()里面放lambda函数的参数
- 如果函数需要返回值->int{}, int这里代表返回值类型
connect(btn2,&QPushButton::clicked, [=](){
btn2->setText("aaaa");
});
结果展示

更多推荐




所有评论(0)