美文网首页
通过Lambda表达式接收信号

通过Lambda表达式接收信号

作者: zhangzq | 来源:发表于2020-07-01 11:27 被阅读0次

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

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

相关文章

网友评论

      本文标题:通过Lambda表达式接收信号

      本文链接:https://www.haomeiwen.com/subject/vccqqktx.html