QSpinBox的两个同名信号使用时报错的处理

QSpinBox有两个同名的信号
void valueChanged(int i)
void valueChanged(const QString &text)

当这样使用时
QObject::connect(&spinBox, SIGNAL(valueChanged(int)), ...)
QObject::connect(&spinBox, SIGNAL(valueChanged(QString)), ...)
没有问题。

当使用C++11以上的语法时:
QObject::connect(&spinBox, &QSpinBox::valueChanged, ...)
编译器会报错:
error: no matching function for call to QObject::connect(QSpinBox*&, <unresolved overloaded function type>, ...)
使用函数名无法区分两个信号。

这时可以使用
auto qOverload(T functionPointer)
改写为
connect(spinbox, qOverload<int>(&QSpinBox::valueChanged), ...)

posted @ 2021-11-29 14:35  soso101  阅读(474)  评论(0编辑  收藏  举报