问题代码
目的:连接按钮组对象button_group和类myclass的槽函数groupToggled
connect(button_group,&QButtonGroup::buttonToggled,this,&myclass::groupToggled);
编译报错提示
error: no matching function for call to ‘myclass::connect(QButtonGroup*&, < unresolved >overloaded function type>, myclass*, void (myclass:: * )(int,bool), Qt::ConnectionType)’
问题点
//(5.9.8版本)
Q_SIGNALS:
void buttonToggled(QAbstractButton *, bool);
void buttonToggled(int, bool);
可以看到QButtonGroup的buttonToggled信号是有两个重载版本的,编译器在连接的时候,不知道你要使用的是哪一个signal,所以提示我们< unresolved >overloaded function type>
解决方法
方法1.改用QT4版本的connect写法,直接告诉编译器,我要用的是那个signal:
connect(button_group,SIGNAL(buttonToggled(int,bool)),this,SLOT(groupToggled(int,bool)));
方法2.使用类成员函数指针,指明signal的函数类型:
//声明要调用的信号的函数指针类型
using funptr = void (QButton::*)(int,bool);
//实例化函数指针
funptr fp = &QButton::buttonToggled;
connect(button_group,fp,this,&myclass::groupToggled);
//上述三行代码等效于
connect(button_group,static_cast<void(QButtonGroup::*)(int,bool)>(&QButtonGroup::buttonToggled),this,&myclass::groupToggled);