c++ - MOC lambda 连接

标签 c++ qt lambda moc

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

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/

相关文章:

c++ - 从堆栈转储和 .elf 文件中提取 FreeRTOS/ARM/C++ 堆栈跟踪的工具?

c++ - 在opengl中旋转时闪烁

javascript - 在 (QML/Javascript) Canvas 中绘制模糊的圆圈

qt - QEventLoop正确使用

c# - Linq 返回没有跟进记录的记录

c# - 从表达式中获取方法名称

c++ - 为什么 CMAKE 在被询问时并不总是复制资源?

python - 将列中心的像素图与 QTreeView 和 QAbstractItemModel 对齐

java - 在另一个Runnable实现类中传递Runnable实例,其中前者的run()方法需要后者的引用

c++ - 编译器选择了错误的重载函数