关于#qt#的问题:Qt 信号和槽 执行lambda表达式崩溃

Qt 信号和槽 执行lambda表达式崩溃

img


第20行 如果引用改为等于就可以正常运行 可是&和=一个是操作本身 一个是操作复制体 我感觉当前情景应该都可以用 为什么&会报错呢

值传递才能行的。
你改成这样试试

r->setInterval(1000);
connect(but,&QPushButton::clicked,this,[&](){
    r->start();
})

t和r都是构造函数中的局部变量,其生命周期仅存在于构造函数中。
槽函数是静态的,全局有效
构造函数中的t和r都保存了new出来的QTimer对象实例的地址,只要堆内存不释放,QTimer实例对象就一直存在于内存中。
[=] 复制了t保存的地址,相当于在槽函数中克隆了一个新的t,所以你仍然可以"新t"所占内存中找到它保存的QTimer实例的地址,并访问QTimer实例对象的内存
[&] 创建了r的引用,当构造函数执行结束时,其所占的栈区内存被释放,于是乎构造函数中的局部变量r也就被释放了,于是槽函数对r的引用也就失效了,自然也就无法访问r本身的内存,拿不到r存的QTimer实例的地址,也就无法访问QTimer实例的内存