我想建立这样的联系:
connect(myMap[myObjectName], &myObject::valueChanged, [&] (int value)
{
QString objectName = sender()->objectName();
myOtherMap[objectName].setValue(QVariant(value));
});但是,这是行不通的,因为如果没有通过MOC的函数,发送方()就无法被调用。因此,使这一工作(似乎)的唯一方法是使用旧的基于信号/插槽字符串的语法。
但是,像这个Qt博客这样的东西似乎应该比以前的字符串语法更好地使用Qt5函数指针语法,所以我很好奇: MOC -- lamda函数有什么方法吗?还是有一整类新语法不能使用?
发布于 2014-10-22 21:37:25
使用this (或任何其他QObject)作为接收方,使sender()方法工作:
connect(myMap[myObjectName], &myObject::valueChanged, this, [&] (int value)
{
QString objectName = sender()->objectName();
myOtherMap[objectName].setValue(QVariant(value));
});或者看看QSignalMapper。这看起来很适合你的场景。
发布于 2014-10-23 21:05:24
根据myMap的不同,这样的东西应该能起作用:
auto &x = myMapmyObjectName connect(x,&myObject::value valueChanged,& { x.setValue(QVariant(value));};
https://stackoverflow.com/questions/26517492
复制相似问题