Qt 5.0+ 中 connect 新语法与重载函数不兼容题目的解决办法,以及小我见地
添加时间:2013-6-20 点击量:
Qt 5.0+ 版本供给了 connect 的新语法,比拟之前的语法新语法可以供给编译期搜检,应用也更便利。可是应用过程中发明一个小题目——当某个 signal 和成员函数是重载关系的时辰,qmake 无法判袂应当选哪一个导致编译错误。
比如 QNetworkReply 中有这么俩函数:
1 // 成员函数
2 NetworkError error() const;
3 // 旌旗灯号
4 Q_SIGNALS:
5 void error(QNetworkReply::NetworkError);
这时辰你直接用新语法绑定,就编译通不过。要解决这个题目有两个选择:
- 应用Qt 4.x 的 connect 语法。
- 显式定义一个函数指针。
后一种这么写:
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++ 这门说话,除非你应用一个很是保守的子集,不然它必然会呈现不测景象,尤其是当你喜好编写某些语法糖的时辰,标准里面任何角落里的某一个细节,都可能让你的解决规划变得很难堪。
读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
Qt 5.0+ 版本供给了 connect 的新语法,比拟之前的语法新语法可以供给编译期搜检,应用也更便利。可是应用过程中发明一个小题目——当某个 signal 和成员函数是重载关系的时辰,qmake 无法判袂应当选哪一个导致编译错误。
比如 QNetworkReply 中有这么俩函数:
1 // 成员函数
2 NetworkError error() const;
3 // 旌旗灯号
4 Q_SIGNALS:
5 void error(QNetworkReply::NetworkError);
这时辰你直接用新语法绑定,就编译通不过。要解决这个题目有两个选择:
- 应用Qt 4.x 的 connect 语法。
- 显式定义一个函数指针。
后一种这么写:
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++ 这门说话,除非你应用一个很是保守的子集,不然它必然会呈现不测景象,尤其是当你喜好编写某些语法糖的时辰,标准里面任何角落里的某一个细节,都可能让你的解决规划变得很难堪。
读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。