初学Qt5.9.2中textChanged信号,用lambda进行捕获的时候出现意外

代码如下会宕

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include "stdaxf.h"

class myWidget : public QWidget
{
    Q_OBJECT
public:
    explicit myWidget(QWidget *parent = nullptr);


signals:

public slots:
    void slotcurrentIndexChanged(const QString &);
};

#endif // MYWIDGET_H

#include "myWidget.h"

myWidget::myWidget(QWidget *parent) : QWidget(parent)
{
    QBoxLayout *lay = new QVBoxLayout(this);
    QTextEdit *texte,*_edit;
        /*如果将QTextEdit *_edit;独立写到.h文件中,不和lambda表达式一起
        ,则可以正常运行*/

    lay->addWidget(texte = new QTextEdit);
    _edit = texte;
        /*出现奇怪问题的地方:为什么不能用texte来打印,而必须缓存一个变量才能正常使用,同时这个缓存变量的定义不能和这段lambda表达式,书写的文件是同一个?*/
    connect(texte,&QTextEdit::textChanged,[&](){
       qDebug()<<_edit->toPlainText();
    });
}

void myWidget::slotcurrentIndexChanged(const QString &str)
{
    qDebug()<<"currentIndexChanged:  "<<str;
}
int main(int argc,char**argv)
{
    QApplication app(argc,argv);
    myWidget widget;
    widget.show();
    return app.exec();
}

有可能是_edit作用域的问题,你把它写成全局作用域的变量应该也可以。可能是离开作用域后,当信号触发的时候,_edit这个指针变量已经随栈被回收,无法访问

有可能是_edit作用域的问题,你把它写成全局作用域的变量应该也可以。可能是离开作用域后,当信号触发的时候,_edit这个指针变量已经随栈被回收,无法访问

路过,看到。明显就是作用域问题,也就是“函数体类的局部变量”和“全局变量”的关系。