Как подключиться к сигналу ошибки QTcpSocket в Qt
Я пытаюсь получить ошибку 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);
Но это показало ту же ошибку.
Где я сделал не так?
Редактировать:
Я попытался подключиться так, как ответ в ответ:
connect(clientConnection->tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), this, &ClientInterface::displayError);
Но я получил эту проблему:
QObject:: connect: Невозможно поставить в очередь аргументы типа 'QAbstractSocket::SocketError' (Убедитесь, что 'QAbstractSocket:: SocketError' зарегистрирован с использованием qRegisterMetaType().)
2 ответа
Вам нужно перегрузить ошибку QAbstractSocket:
connect(tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
this, &ClientInterface::displayError);
Как уже упоминалось, вам понадобится немного магии перегрузки и зарегистрируйте QAbstractSocket::SocketError как метатип.
Это также описано в документации Qt:
Qt 5: http://doc.qt.io/qt-5/qabstractsocket.html
Qt 4.8 http://doc.qt.io/archives/qt-4.8/qabstractsocket.html
Вы также можете использовать макрос SIGNAL(...) вместо синтаксиса указателя функции, чтобы преодолеть эту проблему:
Пример:
QObject::connect(clientConnection->tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(displayError(QAbstractSocket::SocketError)));