QT 关联QComboBox的currentIndexChanged时遇到 成员指针指向重载指针函数问题

主要解决信号槽connect链接时,信号有多个重载,如何告诉编译器使用那个重载。
在项目中动态添加了一个QComboBox,在当准备关联currentIndexChanged信号到某个成员函数中时,发现currentIndexChanged有两个重载:
    void currentIndexChanged(int index);
    void currentIndexChanged(const QString &);

如果直接关联,例:

connect(comboBox, &QComboBox::currentIndexChanged,this,  &Dialog::comBoxChangeIndex);

 

 会报:

error: no matching member function for call to 'connect'

20220331: 推荐使用QT提供的
QOverload类解决重载问题,跳转到此篇末尾查看
需要把对应的函数强转一下,指定使用currentIndexChanged函数的那个重载:
connect(comboBox, (void (QComboBox::*)(int))&QComboBox::currentIndexChanged, this, (void (Dialog::*)(int))&Dialog::comBoxChangeIndex);
connect(comboBox, (void (QComboBox::*)(int))&QComboBox::currentIndexChanged, this, (void (Dialog::*)(int))&Dialog::comBoxChangeIndex);
这样,就指定了要用QComboBox的currentIndexChanged(int)重载,如果想使用currentIndexChanged(const QString &)重载,把(void (QComboBox::*)(int))改成(void (QComboBox::*)(const QString &))
20220331: 正确做法应该使用QT的QOverload类实现,在随笔最下边查看详细用法。

例:
  connect(combobox, (void (QComboBox::*)(int))&QComboBox::currentIndexChanged, this, (void (Setting::*)(int))&Setting::typeComBoxCurrentIndexChanged);
  connect(combobox, (void (QComboBox::*)(const QString &))&QComboBox::currentIndexChanged, this, (void (Setting::*)(QString))&Setting::typeComBoxCurrentIndexChanged);

这里Setting类的typeComBoxCurrentIndexChanged函数也有两个重载,对应QComboBox的currentIndexChanged函数两个重载。

void typeComBoxCurrentIndexChanged(int)
void typeComBoxCurrentIndexChanged(QString)

 

20220331:
以上是通过强转来告诉编译器使用那个重载函数,正确的做法是使用QT提供的QOverload类来实现,例如想使用currentIndexChanged const QString&重载:
    connect(ui->comboBox, QOverload<const QString&>::of(&QComboBox::currentIndexChanged), [](const QString & value){
        
    });

或者使用currentIndexChanged int Index 重载:

    connect(ui->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), [](int intdex){
        
    });

 



 

posted @ 2021-10-18 21:46  耿明岩  阅读(2611)  评论(0编辑  收藏  举报
希望能帮助到你,顺利解决问题! ...G(^_−)☆