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

相关文章
相关标签/搜索