在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
如有错误,欢迎大家留言指正。