Qt 使用 lambda 表达式作为槽函数,sender()返回空指针
connect(colorbox,&ColorCombox::sigColorChanged,[=](QColor color) { ColorCombox * icolorbox = qobject_cast<ColorCombox *>(sender()); //icolorbox 为空指针 if(controlermap.contains(colorbox) == false) { return; } struct ConfigItem* item = controlermap[colorbox]; *((QColor*)(item->value)) =color; item->priwidget->update(); });
ColorCombox * icolorbox = qobject_cast<ColorCombox *>(sender()); 获取到的指针为空,
这里lambda 使用的 [=],因此在函数体内,可以直接使用 colorbox,不必从 sender获取信号发送者
搜到的解释如下:
槽函数获取sender_Qt 使用 lambda 表达式做为槽函数时为什么使用 QObject::sender() 获取到的发送信号对象指针为空?..._果龙火只一的博客-CSDN博客
使用 lambda 表达式做槽函数时,相当于使用了 Qt::DirectConnection 方式连接槽,都在同一个线程中,故获取发送信号对象指针时,直接给你返回了 0.)