Как подключиться к сигналу ошибки 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)));
Другие вопросы по тегам