我正在使用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)我想连接信号而不是函数?
答案 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();
});