通过Lambda表达式接收信号

使用如下全局函数,也可作为信号接收者的被调用函数,如下列代码所示,

void buttonClicked(){
   qDebug("Clicked");
}

MainWidget::MainWidget(QWidget *parent)
   : QWidget(parent)
{
   b.setText("Button");
   b.setParent(this);
   connect(&b,&QPushButton::clicked,buttonClicked);
}

以上代码中,connect中的buttonClicked函数,可以使用一个匿名函数代替,匿名函数的语法为

[捕获变量](参数)
{
语句
}

如下列代码,按钮b在点击后,将会控制台输出Clicked

connect(&b,&QPushButton::clicked,[](){
        qDebug("Clicked");
    });

若使用匿名函数编译出错,则在项目文件中加入一句
CONFIG += c++11
即可启用c++11语法支持

lambda表达式中,默认是无法访问外部变量的,需要在[]中写入待捕获的外部变量,写[=]则可以通过值传递的方式捕获到外部作用域可访问的所有变量。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。