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() 获取到的发送信号对象指针为空?..._果龙火只一的博客-优快云博客
使用 lambda 表达式做槽函数时,相当于使用了 Qt::DirectConnection 方式连接槽,都在同一个线程中,故获取发送信号对象指针时,直接给你返回了 0.)

最低0.47元/天 解锁文章
846

被折叠的 条评论
为什么被折叠?



