Qt在connect重载信号时使用lambda表达式与一般信号时有所区别。
例:QComboBox信号currentIndexChanged有两种参数类型:
void currentIndexChanged(int index);
void currentIndexChanged(const QString &);
如果我们需要获取int类型的信号,一般的写法是这样:
connect(combo,&QComboBox::currentIndexChanged,[=](int index){
if(index==0)
//...
else
//...
}
但是会报错:
error: no matching function for call to ‘xxDialog::connect(QComboBox*&,< unresolved overloaded function type>, xxDialog::xxDialog(QWidget*)::<lambda(int)>)’
编译器不能解析重载类型。
解决办法:转换成指定的信号
connect(combo,static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),[=](int index){
if(index==0)
//...
else
//...
}