在QT中古劲,我們的信號函數(shù)與槽函數(shù)是需要參數(shù)匹配的斥赋,只有參數(shù)匹配了,moc才能將這兩個函數(shù)聯(lián)系起來产艾,否則編譯器將無法分辨該調(diào)用哪個函數(shù)疤剑。
那么如果出現(xiàn)了滑绒,一個信號函數(shù)擁有兩種不同的參數(shù),我們的槽函數(shù)需要如何申明呢隘膘?
在QT4中疑故,我們的連接使用的是兩個不同定義的宏,這樣我們可以顯式的給出我們需要的參數(shù)類型弯菊,但是在QT5中纵势,我們一般不使用宏定義,我們對一個連接的聲明如下:
QObject::connect(*sender,&signal,*receiver,&slot);
可以明顯看到管钳,我們無法在聲明中顯示的給出我們需要的參數(shù)類型钦铁,那么接下來為了解決不同參數(shù)的重載問題,我們需要的是顯式的創(chuàng)立一個信號函數(shù)的指針蹋嵌,下面直接給出例子,例如我需要處理QComBox中的currentIndexChaned信號葫隙,這個信號有兩種參數(shù)栽烂,一是QString,另一個是int恋脚,我們需要使用的int這個信號函數(shù):
void (QComboBox::*fun)(int) = &QComboBox::currentIndexChanged;
QObject::connect(comboBox,fun,*receiver,&slot);
這樣腺办,我們傳遞給槽函數(shù)的信號就是int型的了,也就解決了重載信號函數(shù)的問題糟描。