通过Lambda表达式接收信号

2020-07-01  本文已影响0人  zhangzq

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

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

上一篇 下一篇

猜你喜欢

热点阅读