SUMNUSSARONG 2017-11-20 17:10 采纳率: 0%
浏览 2355

初学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();
}

  • 写回答

3条回答 默认 最新

  • doggy_coder 2017-11-21 01:22
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!