我想像这样创建一个连接:
connect(myMap[myObjectName], &myObject::valueChanged, [&] (int value)
{
QString objectName = sender()->objectName();
myOtherMap[objectName].setValue(QVariant(value));
});
但这不起作用,因为如果函数不经过 MOC,则无法调用 sender()。因此,使这项工作有效的唯一方法(看起来)是使用旧的基于信号/槽字符串的语法。
但是,诸如this Qt blog之类的东西看起来 Qt5 函数指针语法应该优于以前的字符串语法,所以我很好奇:是否有某种方法可以 MOC lamda 函数,或者是否存在新语法不能的一整类情况会被使用吗?
最佳答案
使用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/