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