QT error: no matching member function for call to ‘connect‘

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(&QSpinBox::valueChanged),[=](){


 });//static_cast(&QSpinBox::valueChanged)

具体书写方式
connect(控件名,static_cast<返回值类型 (类:: *)(参数)>(&类::函数名),={

});

另一个例子
void currentIndexChanged(int index);
void currentIndexChanged(const QString &);
这个函数有两种参数
普通函数的写法:

connect(ui->comboBox,&QComboBox::currentIndexChanged,[=]{
    //RqDebug()<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();
});

你可能感兴趣的:(QT,c++,qt)