常见问题之Qt Lambda表达式

在c++11中,引入了Lambda表达式,创建了一个匿名的函数对象。

    connect(btn,&QPushButton::clicked,this,[=]()
     {
         btn->setText("bbb");
     });

[=] 值传递,所在作用域范围内所有可见的局部变量。

    connect(btn,&QPushButton::clicked,this,[&]()
     {
         btn->setText("bbb");
     });

[&] 引用传递,btn进入只读状态。如果修改对象,程序会直接异常结束。
会直接报错,如图所示:
在这里插入图片描述
所以常用

[=](){
};
QPushButton *btn3=new QPushButton(this);
btn3->move(300,100);
QPushButton *btn4=new QPushButton(this);
btn4->move(400,100);
int m=10;
connect(btn3,&QPushButton::clicked,this[m()mutable{m=20;qDebug()<<m;});
connect(btn4,&QPushButton::clicked,this,[=](){qDebug()<<m;});
qDebug()<<m;

如果想要改变变量值,可以使用mutable关键字
ps:Lambda表达式是c++11新特性,如果写了报错,请在 .pro 文件中加上
CONFIG +=c++11
如有错误,欢迎大家留言指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值