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){
        
    });

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM