问题描述:
在调用某个类的信号函数的时候,出现信号函数名字相同,参数不同的情况,但是Qt在链接信号槽的时候,又不需要指明信号函数参数,此时就会出现无法分辨的情况。
例如:QComboBox的信号
Q_ SIGNALS:
void currentIndexChanged(int index);
void currentIndexChanged(const QString &);
如果用Qt5的信号槽写法,就是如下结果
connect(ui->comboBox, &QComboBox::currentIndexChanged, this, &MainWindow::on_ IndexChanged);
编译器会因不知道该调用哪个方法而报错。
解决办法:
1、用Qt4的信号槽连接方式来写。
为什么用QT4的connect写就不会出错呢?原因很简单,因为QT4的写的时候,需要带上信号函数和槽函数的参数类型,这样就不会出现问题。
// 连接int类型的信号
connect(comboBox, SIGNAL(currentIndexChanged(int)), receiver, SLOT(mySlotInt(int)));// 连接QString类型的信号
connect(comboBox, SIGNAL(currentIndexChanged(QString)), receiver, SLOT(mySlotString(QString)));
2、使用泛型
可以通过使用泛型指定要调用的函数,解决信号重载问题。
connect(ui->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&MainWindow::on_ IndexChanged);
有用的知识又增加了~