一、错误提示
error: C2664: “QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”: 无法将参数 2 从“overloaded-function”转换为“const char *”
二、错误原因
1、Qt5的connect添加了编译器类型检查,如果遇到匹配失败的,或者找不到信号/槽的地方,会直接报错,而不是qt4到运行期才告诉用户。
2、使用函数指针能够获得编译期的类型检查,而这样也有弊端,当遇到重载信号槽的时候在编译器就会报错。
三、解决办法
1、使用C++的静态类型转换。
QButtonGroup *btn = new QButtonGroup(this);
// 绑定信号槽
connect(btn, static_cast<void (QButtonGroup:: *)(int)>(&QButtonGroup::buttonPressed),this, &PanelWidget::btnPressed);
2、手动声明一个函数指针,只想目标的信号/槽方法。
void (ClassA:: *p)(QString, QDate) = &ClassA::signalFunciton;
connect(&a, p, &b, &Reader::slotFunction);
或者
connect(&a,(void (ClassA:: *)(QString, ))&ClassA::signalFunciton, b, &ClassB::slotFunction);