【问题标题】:Connecting to QNetworkReply::error signal连接到 QNetworkReply::error 信号
【发布时间】:2013-02-06 05:03:35
【问题描述】:

我正在使用 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' 转换为'常量字符 *' 上下文不允许消除重载函数的歧义

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

【问题讨论】:

标签: qt qt5


【解决方案1】:

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

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

这是对重载函数使用新语法的noted 后果:

缺点:

重载时语法非常复杂?

附:您可以在上面的链接中找到类似的示例:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多