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<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();
});
  • 13
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值