Qt5 的connect新语法中 lambda表达式的引用传递问题
介绍 Qt5 的 connect 新式语法的文章很多,关于其使用 lambda 表达式的语法也很容易搜到,今天我来一点不一样的干货也可以说是bug,由于个人能力原因,无法深究真正的原因,望神通广大的网友能告知一下,不尽感激。
/* * 使用Qt 5.15.0 创建一个新的GUI程序,基类选择QWidget * 同时取消创建 ui界面,在 widget.cpp 中写上下面的代码 * 然后编译执行,在弹出的窗口中,点击QPushButton即可验证 */ #include "widget.h" #include <stdio.h> #include <QDebug> #include <QLabel> #include <QPushButton> Widget::Widget(QWidget *parent) : QWidget(parent) { resize(500, 300); QLabel *label = new QLabel("Label", this); label->resize(100, 50); QPushButton *pushButton = new QPushButton("PushButton", this); qDebug() << "1 " << label; qDebug() << "2 " << (void *)label; connect(pushButton, &QPushButton::clicked, [&label] () { qDebug() << "3 " << (void *)label;}); } Widget::~Widget() { } /* * 结果如下: * 1 QLabel(0x1eeffe64b40) * 2 0x1eeffe64b40 * 3 0x32773cfa48 * 经实测 label 使用引用传递时,打印其值时,发现lambda中的label和lambda外的label结果不一样 * 另外,在lambda中打印label时,需要强转为(void *)类型 * “qDebug() << label;”会造成段错误。原因即是本次实验的表明的结果。 */