QT5 信号重载情况:
void valueChanged(int i)
void valueChanged(const QString &text)
使用如下语句进行连接,编译器发出错误 。
connect(spinBox, &QSpinBox::valueChanged,this,
&MainWindow::onSpinBoxValueChanged);
原因分析:
因为信号valueChanged有重载,所以使用&QSpinBox::valueChanged语句获取信号的指针会有歧义:有两个相同名字的信号。
解决方法:
- 使用Qt4类型的旧的信号槽连接语法:
connect(spin,SIGNAL(valueChanged(int)),this,
SLOT(onSpinBoxValueChanged(int)));
由于SIGNAL和SLOT两个宏都要求指明参数类型,所以不会出现歧义。但是,这样做有失去了编译期检查的优点。
- 继续使用Qt5的新语法,需要增加一个显示类型转换:
QObject::connect(spinBox,
static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),this,&MainWindow::onSpinBoxValueChanged);