【QT问题】 Qt信号函数如果重名,调用怎么处理

03-25 1053阅读

问题描述:

【QT问题】 Qt信号函数如果重名,调用怎么处理
(图片来源网络,侵删)

在调用某个类的信号函数的时候,出现信号函数名字相同,参数不同的情况,但是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::of(&QComboBox::currentIndexChanged), this,
&MainWindow::on_ IndexChanged);

有用的知识又增加了~

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]