Qt 信号和槽 执行lambda表达式崩溃
值传递才能行的。
你改成这样试试
r->setInterval(1000);
connect(but,&QPushButton::clicked,this,[&](){
r->start();
})
原来qt工程文件也可以像c++语言一样,通过类似宏定义预处理命令来对不同的环境进行区分处理,非常的方便实用,下面介绍几个常用的环境判断方法,供大家参考:
是否为32位系统:
contains(QT_ARCH, i386) {
message("32-bit")
} else {
message("64-bit")
}
t和r都是构造函数中的局部变量,其生命周期仅存在于构造函数中。
槽函数是静态的,全局有效
构造函数中的t和r都保存了new出来的QTimer对象实例的地址,只要堆内存不释放,QTimer实例对象就一直存在于内存中。
[=] 复制了t保存的地址,相当于在槽函数中克隆了一个新的t,所以你仍然可以"新t"所占内存中找到它保存的QTimer实例的地址,并访问QTimer实例对象的内存
[&] 创建了r的引用,当构造函数执行结束时,其所占的栈区内存被释放,于是乎构造函数中的局部变量r也就被释放了,于是槽函数对r的引用也就失效了,自然也就无法访问r本身的内存,拿不到r存的QTimer实例的地址,也就无法访问QTimer实例的内存