我试图通过使用信号和插槽来获取QTcpSocket错误 . 我喜欢这样:
connect(clientConnection->tcpSocket, &QTcpSocket::error, this, &ClientInterface::displayError);
void ClientInterface::displayError()
{
qDebug() << clientConnection->tcpSocket->error();
qDebug() << clientConnection->tcpSocket->errorString();
}
但是我收到了这个错误:
错误:没有匹配函数来调用'ClientInterface :: connect(QTcpSocket *&,ClientInterface *,void(ClientInterface :: *)())'connect(clientConnection-> tcpSocket,&QTcpSocket :: error,this,&ClientInterface: :displayError);
我也尝试使用 QAbstractSocket::SocketError
参数实现插槽,如下所示:void displayError(QAbstractSocket::SocketError);
但它显示了同样的错误 .
我哪里做错了?
Edit:
我试图像这样联系,答案是:
connect(clientConnection->tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), this, &ClientInterface::displayError);
但我遇到了这个问题:
QObject :: connect:不能对'QAbstractSocket :: SocketError'类型的参数进行排队(确保使用qRegisterMetaType()注册'QAbstractSocket :: SocketError' . )
2 回答
您需要重载QAbstractSocket错误:
如前所述,您将需要一些重载魔法并将QAbstractSocket :: SocketError注册为元类型 .
这也在Qt文档中描述:
Qt 5:http://doc.qt.io/qt-5/qabstractsocket.html#error
Qt 4.8 http://doc.qt.io/archives/qt-4.8/qabstractsocket.html#error
您也可以使用SIGNAL(...)宏而不是函数指针语法来克服此问题:
例: