QT4与QT5 在信号重载情况下的信号连接方式
QT4
connect(&sub,SIGNAL(mySignal()),this,SLOT(dealsub()));
connect(&sub,SIGNAL(mySignal(int,QString)),this,SLOT(dealSlot(int,QString)));
槽函数必须有slots关键字修饰
sub是一个SubWidget对象
使用SIGNAL和SLOT可以在重载的两个 信号/槽 中选择一个,不需要像QT5定义函数指针进行区分,但是SIGNAL和SLOT会把函数名转换为字符串,编译时不会进行错误检查,即使函数名有误,也不会报错。会造成程序运行时突然崩溃,不推荐这种方式。
QT5
void (SubWidget::*funSignal)() = &SubWidget::mySignal;
connect(&sub,funSignal,this,&MainWidget::dealsub);
void (SubWidget::*testSignal)(int , QString) = &SubWidget::mySignal;
connect(&sub,testSignal,this,&MainWidget::dealSlot);
sub是一个SubWidget对象
MainWidget和SubWidget都是继承于QWidget的派生类
mySignal是自定义的信号
*funSignal是一个函数指针,指向mySignal
*testSignal是一个函数指针,指向mySignal(int , QString)
此时信号有重载,需要用函数指针对其进行区分,然后再进行信号连接。