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

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/

10-12 20:54