连接到QNetworkReply ::错误信号

时间:2013-02-21 00:40:10

标签: qt qt5

我正在使用Qt5的新连接语法。 QNetworkReply有一个名为error的信号,还有一个名为error的函数。尝试连接信号时会出现问题:

connect(reply, &QNetworkReply::error, this, &MyClass::error);
  

错误C2664:'QMetaObject :: Connection QObject :: connect(const QObject *,const char *,const QObject *,const char *,Qt :: ConnectionType)':无法将参数2从'overloaded-function'转换为'const char *'   上下文不允许消除重载函数的歧义

如何告诉编译器(MSVC)我想连接信号而不是函数?

2 个答案:

答案 0 :(得分:13)

您需要手动转换函数指针以寻址正确的函数:

connect(reply, static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error), this, &MyClass::error);

这是为重载函数使用新语法的noted结果:

  

缺点:

     

重载时语法非常复杂?

P.S。您可以在上面的链接中找到类似的示例:

 QObject::connect(socket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error), [socket] (QAbstractSocket::SocketError) {
        qDebug()<< "ERROR " << socket->errorString();
        socket->deleteLater();
    });

答案 1 :(得分:0)

Qt 5.15 开始QNetworkReply::error不再是一个信号。幸运的是,您可以连接到&QNetworkReply::errorOccurred,而无需进行类型转换:

connect(reply, &QNetworkReply::errorOccurred, this,
            [reply](QNetworkReply::NetworkError) {
               qCDebug() << "Error " << reply->errorString(); 
            });