Qt 5.0+ 版本提供了 connect 的新語法,相比以前的語法新語法能夠提供編譯期檢查,使用也更方便。但是使用過程當中發現一個小問題——當某個 signal 和成員函數是重載關係的時候,qmake 沒法辨別應該選哪個致使編譯錯誤。c++
好比 QNetworkReply 中有這麼倆函數:函數
1 // 成員函數 2 NetworkError error() const; 3 // 信號 4 Q_SIGNALS: 5 void error(QNetworkReply::NetworkError);
這時候你直接用新語法綁定,就編譯通不過。要解決這個問題有兩個選擇:spa
後一種這麼寫:指針
1 QNetworkReply* reply; 2 MyClass* myObject; 3 4 // ... 5 6 void (QNetworkReply::*sig)(QNetworkReply::NetworkError); 7 connect(reply, sig, myObject, &MyClass::mySlot);
PS: 其實相似的問題,用 c++ 的同窗必定都遇到過,c++ 這門語言,除非你使用一個很是保守的子集,不然它必定會出現意外狀況,尤爲是當你喜歡編寫某些語法糖的時候,標準裏面任何角落裏的某一個細節,均可能讓你的解決方案變得很尷尬。code