如何连接Qt中的QTcpSocket错误信号

如何连接Qt中的QTcpSocket错误信号,qt,qtcpsocket,Qt,Qtcpsocket,我试图通过使用信号和插槽获得QTcpSocket错误。我喜欢这样: connect(clientConnection->tcpSocket, &QTcpSocket::error, this, &ClientInterface::displayError); void ClientInterface::displayError() { qDebug() << clientConnection->tcpSocket->error();

我试图通过使用信号和插槽获得QTcpSocket错误。我喜欢这样:

connect(clientConnection->tcpSocket, &QTcpSocket::error, this, &ClientInterface::displayError);

void ClientInterface::displayError()
{
    qDebug() << clientConnection->tcpSocket->error();
    qDebug() << clientConnection->tcpSocket->errorString();
}
但我遇到了这个问题:

QObject::connect:无法对类型为“QAbstractSocket::SocketError”的参数排队 (确保使用qRegisterMetaType()注册了'QabStretchSocket::SocketError'


您需要重载QAbstractSocket错误:

connect(tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),

            this, &ClientInterface::displayError);
connect(tcpSocket,QOverload::of(&QAbstractSocket::error),
这是(客户端接口::显示错误)(&ClientInterface::displayError);

如前所述,您将需要一些重载魔法,并将QAbstractSocket::SocketError注册为元类型

这在Qt文档中也有描述:

Qt 5:

Qt 4.8

您也可以使用SIGNAL(…)宏而不是函数指针语法来解决此问题:

例如:

QObject::connect(clientConnection->tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(displayError(QAbstractSocket::SocketError)));

可能是重复的,我尝试了您的方法来重载QAbstractSocket错误,但不知怎么的,它只是向我显示了另一个错误消息:QObject::connect:无法对类型为“QAbstractSocket::SocketError”的参数进行排队(请确保使用qRegisterMetaType()注册了“QAbstractSocket::SocketError”。)您是否已这样声明了您的displayError:
displayError(QAbstractSocket::SocketError SocketError)
也尝试
#包括
QObject::connect(clientConnection->tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(displayError(QAbstractSocket::SocketError)));