MOC是一个lambda连接

时间:2014-10-22 21:32:21

标签: c++ qt lambda moc

我想像这样创建一个连接:

connect(myMap[myObjectName], &myObject::valueChanged, [&] (int value)
{
    QString objectName = sender()->objectName();
    myOtherMap[objectName].setValue(QVariant(value));
});

这并不起作用,因为如果没有函数通过MOC,就不能调用sender()。因此,使这项工作(看似)的唯一方法是使用旧的基于信号/槽字符串的语法。

然而,像this Qt blog这样的东西使得Qt5函数指针语法看起来应该比先前的字符串语法更受欢迎,所以我很好奇:是否有某种方法可以通过MOC实现lamda函数,或者是否有一类不能使用新语法的案例?

2 个答案:

答案 0 :(得分:2)

使用this(或任何其他QObject)作为接收方,使sender()方法有效:

connect(myMap[myObjectName], &myObject::valueChanged, this, [&] (int value)
{
    QString objectName = sender()->objectName();
    myOtherMap[objectName].setValue(QVariant(value));
});

或者看看QSignalMapper。它看起来非常适合您的场景。

答案 1 :(得分:0)

根据myMap,这样的事情应该有效:

auto& x = myMap [myObjectName] connect(x,& myObject :: valueChanged,[&](int value){x.setValue(QVariant(value));});