zoukankan      html  css  js  c++  java
  • Qt 5.0+ 中 connect 新语法与重载函数不兼容问题的解决方法,以及个人看法

    Qt 5.0+ 版本提供了 connect 的新语法,相比之前的语法新语法可以提供编译期检查,使用也更方便。可是使用过程中发现一个小问题——当某个 signal 和成员函数是重载关系的时候,qmake 无法辨别应该选哪一个导致编译错误。

    比如 QNetworkReply 中有这么俩函数:

    1 // 成员函数
    2     NetworkError error() const;
    3 // 信号
    4 Q_SIGNALS:
    5     void error(QNetworkReply::NetworkError);

    这时候你直接用新语法绑定,就编译通不过。要解决这个问题有两个选择:

    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++ 这门语言,除非你使用一个非常保守的子集,否则它一定会出现意外情况,尤其是当你喜欢编写某些语法糖的时候,标准里面任何角落里的某一个细节,都可能让你的解决方案变得很尴尬。

  • 相关阅读:
    数值拓展与函数拓展
    正则小记
    Struts2(三)配置详解
    Struts2(二)工作原理
    Struts2(一)基本配置
    Eclipse新建动态web工程项目出现红叉解决方案
    Spring系列之AOP
    Java动态代理的实现机制
    Spring系列之装配Bean
    Spring系列之基本配置
  • 原文地址:https://www.cnblogs.com/legendlee/p/3145413.html
Copyright © 2011-2022 走看看