我想像这样创建一个连接:
connect(myMap[myObjectName], &myObject::valueChanged, [&] (int value)
{
QString objectName = sender()->objectName();
myOtherMap[objectName].setValue(QVariant(value));
});
但是,这不起作用,因为在没有通过MOC的函数的情况下,无法调用sender()。因此,唯一可行的方法(貌似)是使用旧的基于信号/插槽字符串的语法。
但是,像this Qt blog这样的东西使Qt5函数指针语法似乎比以前的字符串语法更可取,所以我很好奇:是否有某种方法可以对lamda函数进行MOC,或者是否存在一整类的情况,无法使用新语法?
最佳答案
使用this
(或任何其他QObject
)作为接收器以使sender()
方法起作用:
connect(myMap[myObjectName], &myObject::valueChanged, this, [&] (int value)
{
QString objectName = sender()->objectName();
myOtherMap[objectName].setValue(QVariant(value));
});
或看看QSignalMapper。看起来很适合您的情况。
关于c++ - MOC Lambda连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26517492/