Qt项目报错: static assertion failed: Signal and slot arguments are not compatible(信号和槽的参数不对应)
例:
槽函数:
void A::give(QString a){
qDebug()<<"give"<<a;
}
部分代码
void (A:: *asignanl)(QString)=&A::give;
void (B:: *bsignanl)(QString)=&B::hungry;
connect(tea,asignal,stu,bsignal);
QPushButton *btn=new QPushButton("dianji",this);
connect(btn,&QPushButton::clicked,tea,asignal);
}
执行第二个connect函数时将会报错: static assertion failed: Signal and slot arguments are not compatible
原因:clicked函数的参数为布尔类型,而槽函数asignal的参数为Qstring类型,导致链接失败
解决方法:
1 链接一个返回值为bool或者void的槽函数,才该函数中使用emit激活
void (A:: *asignanl)(QString)=&A::give;
void (B:: *bsignanl)(QString)=&B::hungry;
connect(tea,asignal,stu,bsignal);
QPushButton *btn=new QPushButton("dianji",this);
void Widget ::C()
{
emit tea->hungry("aaaa");
}
connect(btn,&QPushButton::clicked,tea,&Widget::c);
2 使用栏目他表达式直接接收信号
void (A:: *asignanl)(QString)=&A::give;
void (B:: *bsignanl)(QString)=&B::hungry;
connect(tea,asignal,stu,bsignal);
QPushButton *btn=new QPushButton("dianji",this);
connect(btn,&QPushButton::clicked,[=](){emit tea->hungry(aaaaa)});
}
注意:1.信号和槽函数的参数,类型必须进行一一对应
2.信号和槽函数的参数数量可以不一致,则信号的参数应该多于槽函数的参数,切对应的参数一致