Qt使用connect函数时向slot传递参数:使用lambda表达式

28 篇文章 4 订阅

大家可以先看一下我的之前一篇文章:http://blog.csdn.net/imred/article/details/72940365,这篇是对它的补充,使用lambda表达式这种方法也在https://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot的回答中。
使用lambda表达式向slot传递特定参数使用的是connect函数的一个重载版本:

QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)

相对于最常用的connect版本,第二个参数被替换为指向类成员函数的指针,第四个参数被替换为functor,我们可以向它传递一个lambda表达式(这需要你的编译器支持C++11标准),实现方法如下:

connect(ui->button1, &QPushButton::clicked, this, [=](){printMsg(1);});
connect(ui->button2, &QPushButton::clicked, this, [=](){printMsg(2);});
connect(ui->button3, &QPushButton::clicked, this, [=](){printMsg(3);});

我觉得这种做法其实还是相当于实现了多个slot,但是lambda表达式让它变得很简洁。


转发请注明来源http://blog.csdn.net/imred

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值