在Qt中经常会有一些信号,参数类型不同,但是信号名字相同,例如QComboBox的信号:
Q_SIGNALS:
void currentIndexChanged(int index);
void currentIndexChanged(const QString &);
对于这种重载的信号,用Qt4的connect来写是没问题的,代码如下:
connect(ui->comboBox, SIGNAL(currentIndexChanged(int)),this, SLOT(on_IndexChanged(int)));
但是如果用Qt5的写法那就无法编译通过,错误写法如下:
connect(ui->comboBox, &QComboBox::currentIndexChanged, this, &MainWindow::on_IndexChanged);
因为currentIndexChanged的参数可能是int, 也可能是QString, 此时有歧义,当然为了解决这种参数重载,Qt提供了泛型来解决,正确的写法如下:
connect(ui->comboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::on_IndexChanged);
用QOverload来指定参数类型,这样就不会有歧义了,这种写法看的比较啰嗦,Qt4那种connect其实也不错。