今天一个问题困扰了我一个多小时,调试异常后发现一个平常没注意的问题,记录一下:
先上结论:
Qt信号槽连接时如果使用Lambda表达式,那么不能在Lambda表达式中获取到信号发送者!
connect(button,&QPushButton::clicked,
[=](){
//下面这句话获取到的信号发送者指针将是nullptr;
QPushButton* tBut = qobject_cast<QPushButton*>(QObject::sender());
}
);
既然不能获取信号发送者,那么不光是上面这行强转代码,还要其他需要使用到信号发送者实例的代码都会报异常(例如我开始的错误就是判断发送者实例的属性)。
解决问题的方法很简单,就是不使用Lambda表达式,直接连接槽函数,在槽函数中就能获取发送者实例了。