2

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

connect(myMap[myObjectName], &myObject::valueChanged, [&] (int value)
{
    QString objectName = sender()->objectName();
    myOtherMap[objectName].setValue(QVariant(value));
});

但这不起作用,因为如果函数不通过 MOC,就无法调用 sender()。因此,使这项工作(看似)的唯一方法是使用旧的基于信号/槽字符串的语法。

但是,像this Qt blog之类的东西看起来Qt5函数指针语法应该比以前的字符串语法更受欢迎,所以我很好奇:有什么方法可以MOC lamda函数,还是有一整类案例哪里不能使用新语法?

4

2 回答 2

2

使用this(或任何其他QObject)作为接收器以使sender()方法工作:

connect(myMap[myObjectName], &myObject::valueChanged, this, [&] (int value)
{
    QString objectName = sender()->objectName();
    myOtherMap[objectName].setValue(QVariant(value));
});

或者看看QSignalMapper。它看起来很适合您的场景。

于 2014-10-22T21:37:25.770 回答
0

根据 myMap,这样的事情应该可以工作:

自动 &x = myMap[myObjectName] connect(x, &myObject::valueChanged, [&] (int value) { x.setValue(QVariant(value)); });

于 2014-10-23T21:05:24.027 回答