error: no matching member function for call to ‘connect’
包括connect之外的函数也可能会出现这种错误,目前遇到的一种错误,例:
//出错函数
connect(ui->spinBox_HEX,&QSpinBox::valueChanged,[=](){
});
//QSpinBox::valueChanged函数声明
Q_SIGNALS:
void valueChanged(int);
void valueChanged(const QString &);
这样的信号连接格式是没问题的,但是QSpinBox::valueChanged函数有重载,编译器不知道用哪种重载,就会出现这个错误。我们使用的是 void valueChanged(const QString &);格式,因此在connect中使用强制类型转换
//强制类型转换后
connect(ui->spinBox_HEX,static_cast<void (QSpinBox::*)(const QString &)>(&QSpinBox::valueChanged),[=](){
});//static_cast<void (QSpinBox::*)(const QString &)>(&QSpinBox::valueChanged)
具体书写方式
connect(控件名,static_cast<返回值类型 (类:: *)(参数)>(&类::函数名),={
});
另一个例子
void currentIndexChanged(int index);
void currentIndexChanged(const QString &);
这个函数有两种参数
普通函数的写法:
connect(ui->comboBox,&QComboBox::currentIndexChanged,[=]{
//RqDebug()<<ui->comboBox->currentText();
});
正确用法以
void currentIndexChanged(int index); 为例
首先 返回值 void 参数 int index 类 QComboBox
名称 | 数据 |
---|---|
返回值 | void |
参数 | int index |
类 | QComboBox |
原写法中的
&QComboBox::currentIndexChanged
保持不变,在前面加
static_cast<返回值类型 (类:: *)(参数)>(&QComboBox::currentIndexChanged //格式
static_cast<void (类:: *)(参数)>(&QComboBox::currentIndexChanged //加返回值
static_cast<void (QComboBox:: *)(参数)>(&QComboBox::currentIndexChanged //加类
static_cast<void (QComboBox:: *)(int index)>(&QComboBox::currentIndexChanged //最后一个加参数
最后得到的实际代码
connect(ui->comboBox,static_cast<void (QComboBox::*)(int index)>(&QComboBox::currentIndexChanged),[=]{
qDebug()<<ui->comboBox->currentText();
});
对应
void currentIndexChanged(const QString &);
connect(ui->comboBox,static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged),[=]{
qDebug()<<ui->comboBox->currentText();
});