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();
});
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)