Qt 5.0+ 版本提供了 connect 的新語法,相比之前的語法新語法可以提供編譯期檢查,使用也更方便。可是使用過程中發現一個小問題——當某個 signal 和成員函數是重載關系的時候,qmake 無法辨別應該選哪一個導致編譯錯誤。
比如 QNetworkReply 中有這麼倆函數:
NetworkError error() error(QNetworkReply::NetworkError);
這時候你直接用新語法綁定,就編譯通不過。要解決這個問題有兩個選擇:
後一種這麼寫:
QNetworkReply* MyClass* (QNetworkReply::* connect(reply, sig, myObject, &MyClass::mySlot);
PS: 其實類似的問題,用 c++ 的同學一定都遇到過,c++ 這門語言,除非你使用一個非常保守的子集,否則它一定會出現意外情況,尤其是當你喜歡編寫某些語法糖的時候,標准裡面任何角落裡的某一個細節,都可能讓你的解決方案變得很尴尬。