Qt 5.0+ 中 connect 新語法與重載函數不兼容問題的解決方法,以及我的見解

Qt 5.0+ 版本提供了 connect 的新語法,相比以前的語法新語法能夠提供編譯期檢查,使用也更方便。但是使用過程當中發現一個小問題——當某個 signal 和成員函數是重載關係的時候,qmake 沒法辨別應該選哪個致使編譯錯誤。c++

好比 QNetworkReply 中有這麼倆函數:函數

1 // 成員函數
2     NetworkError error() const;
3 // 信號
4 Q_SIGNALS:
5     void error(QNetworkReply::NetworkError);

這時候你直接用新語法綁定,就編譯通不過。要解決這個問題有兩個選擇:spa

  1. 使用Qt 4.x 的 connect 語法。
  2. 顯式定義一個函數指針。

後一種這麼寫:指針

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

相關文章
相關標籤/搜索