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

大家可以先看一下我的之前一篇文章: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

猜你喜欢

转载自blog.csdn.net/imred/article/details/73188251