我想像这样创建一个连接:
connect(myMap[myObjectName], &myObject::valueChanged, [&] (int value)
{
QString objectName = sender()->objectName();
myOtherMap[objectName].setValue(QVariant(value));
});
这并不起作用,因为如果没有函数通过MOC,就不能调用sender()。因此,使这项工作(看似)的唯一方法是使用旧的基于信号/槽字符串的语法。
然而,像this Qt blog这样的东西使得Qt5函数指针语法看起来应该比先前的字符串语法更受欢迎,所以我很好奇:是否有某种方法可以通过MOC实现lamda函数,或者是否有一类不能使用新语法的案例?
答案 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));});