Qt同名信号error: no matching member function for call to ‘connect‘解决方法

文章目录

  • 1 错误呈现
  • 2 原因
  • 3 解决

1 错误呈现

原始代码

 connect(ui->SpinBox1, &QSpinBox::valueChanged, 
 ui->Slider1, &QSlider::setValue);

在这里插入图片描述

2 原因

QSpinBox类中有两个同名信号,信号和槽函数对接的参数类型不匹配

Q_SIGNALS:
    void valueChanged(int);
    void textChanged(const QString &);
#if QT_DEPRECATED_SINCE(5, 14)
    QT_DEPRECATED_X("Use textChanged(QString) instead")
    void valueChanged(const QString &);
#endif

3 解决

使用强制类型转换,转换为需要的类型

connect(ui->SpinBox1, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), 
ui->Slider1, &QSlider::setValue);

另一种解决方法(使用老版本的信号和槽函数,缺点:编译时不会检查错信号和槽函数是否存在):

connect(ui->SpinBox1, SIGNAL(valueChanged(int)), 
ui->Slider1, SLOT(setValue(int)));

你可能感兴趣的:(Qt,Qt,槽函数,信号)