Qt学习笔记4——Lambda表达式,信号和槽总结
- P12. 信号连接信号
- P13. Qt4版本信号和槽连接
- P14. Lambda表达式
- P15. 信号槽的总结
- (P12. 信号连接信号)
前面是信号连接信号,后面是信号连接槽函数;关键字 connect 可以连接信号和信号
断开信号用 disconnect ,用法和 connect 一样
1 //无参信号和槽连接
2 void(Teacher::*teachersig2)(void)=&Teacher::hungry;
3 void(Student::*studentslot2)(void)=&Student::treat;
4 connect(zt,teachersig2,st,studentslot2);
5 //信号连接信号
6 connect(btn,&QPushButton::clicked,zt,teachersig2);
- (P13. Qt4版本信号和槽连接)
- 信号可以连接信号
- 一个信号 可以连接 多个槽函数
- 多个信号 可以连接 同一个槽函数
- 信号和槽函数的参数 类型必须对应
- 信号和槽的参数个数:信号的参数个数,可以大于槽函数的参数个数(信号参数不多余的部分,类型要和槽函数参数类型一一对应)
Qt4 版本写法: connect(信号的发送者,SIGNAL(信号),信号的接收者,SLOT(槽函数))
优点:参数直观; 缺点:编译器不会检测参数类型 (不推荐使用 Qt4 版本写法)
- (P14. Lambda表达式)
如果Qt是5.4之前的版本,要在.pro文件中添加 CONFIG += c++11
- Lambda表达式
声明: [] () {} ;
调用: [] () {} () ;
[] 标识符 匿名函数,里面可以写:
= 值传递(一般用 = 足以)
& 引用传递
() 参数
{} 实现体
mutable 修饰值传递变量,可以修改拷贝出的数据,改变不了本体(mutable 写到() 和 {} 之间)
int m=10;
[=]()mutable{
m+=100;
qDebug()<<"m="<<m;
}();
qDebug()<<"m="<<m;
运行结果
m=110
m=10
返回值 [] () ->int {...; renturn...;}; (->返回值类型 写到() 和 {} 之间)
- Lambda 表达式可以写到 connect 中槽函数(最后一个位置)的位置
1 //利用Lambda表达式,实现点击按钮,关闭窗口
2 QPushButton * btn2 = new QPushButton(this);
3 btn2->setText("关闭");
4 btn2->move(100,0);
5 connect(btn2,&QPushButton::clicked,this,[=](){
6 this->close();
7 });
(这里的 Lambda 表达式不用再写调用,即不用再多写() ;如果最后一个位置是 Lambda 表达式,第三个位置的 this 可以省略(4个位置变3个位置,少一个逗号))
- (P15. 信号槽的总结)
分类:
QT学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端