Qt-Lambda表达式

Lambda表达式

Lambda表达式用于定义并创建匿名的函数对象
capturemutable->return-type
{
statement
}
[]标识符 表示一个Lambda的开始 必须存在 不能省略
()参数
{}实现体
在Lambda表达式中
= 表示值传递 可以让Lambda表达式在作用范围内所有可见的局部变量(包括Lambda所在类的this)
例如

= 方式 值传递
[=](){ btn->setText("ddd"); }()//如果不写=就会报错 因为程序并不知道btn是什么
a 方式 就是直接指定某个值传进来
[btn](){ btn->setText("ddd"); }()//如果只写btn则只有btn在大括号里面才能从外面传递进来 如果在大括号里面调用其他的 则会出问题比如btn2

& 方式表示引用传递方式
[&](){ btn->setText("ddd"); }()

&a 方式 指定特定的值
[&btn](){ btn->setText("ddd"); }()

a,&b方式 
[btn,&btn2](){ btn->setText("ddd"); btn2->setText(""zz);}()

=,&a,&b方式 除了a,b按引用方式 其他值都按值传递方式
[= &btn,&btn2](){ btn->setText("ddd"); btn2->setText(""zz);}()

&,=a,=b方式 除了a,b按引用方式 其他值都按值传递方式
[& =btn,=btn2](){ btn->setText("ddd"); btn2->setText(""zz);}()

mutable方式 更改值传递进来的拷贝值 注意不会改变值本体 只是改变拷贝值
connect(btn,&QPushButton::clicked,this,[m]()mutable(m = 100+10;qDebuf()<<m;))

->int方式 设置函数返回值
int ret = {}()->int{return 1000;}();//设置返回值为int类型

运用

本来在上一章中 如果要实现鼠标点击的有参版本的是

connect(btn,&QPushButton::clicked,this,&Widget::Over);
void Widget::Over()
{
    emit teacher->hungry("宫保鸡丁");
}

所以如果调用Lambda表达式就可以实现

connect(btn,&QPushButton::clicked,this,[=](){
        emit teacher->hungry("宫保鸡丁");
        //还可以加一些别的操作 例如
        //this->close();
    });

如果触发了点击信号 则调用本窗口的匿名函数对象 该函数直接触发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值