Почему я не могу подключить QWebsocket::error SIGNAL к лямбде или любому другому типу слота с идентичной подписью? QT5.9

Я пытаюсь создать простую программу, которая реализует QWebSocket, однако сначала я попытался проверить, включено ли соединение. Это не выдает никаких исключений, так как я никогда не подключал сигнал ошибки, но я мог проверить на своем облачном сервере, была ли предпринята какая-либо попытка подключения, и увидел, что соединение никогда не происходило. Поэтому я попытался реализовать сигнал об ошибке, чтобы понять причину проблемы, но не могу подключить сигнал к моей функции печати. Я имею в виду, что всегда получаю ошибку времени компиляции. Если у кого-то есть идеи о том, как мне к этому подойти, скажите, пожалуйста!

Я тоже так пробовал. Я не получаю никаких ошибок во время компиляции, однако я получаю эту ошибку времени выполнения:

QObject::connect(websocket, SIGNAL(error(QAbstractSocket::SocketError error)),cp, SLOT(OnWebSocketError(QAbstractSocket::SocketError error)));

Ниже приведены 3 изображения для иллюстрации проблемы:

Основной файл:изображение 1

Сообщение об ошибке:изображение 2

Класс CustomPrinter:изображение 3

Также игнорируйте "qDebug()<<" "

Это ошибка, которую я получаю "

QObject::connect: No such signal QWebSocket::error(QAbstractSocket::SocketError error) in ../Websocket1/main.cpp:14"

1 ответ

При использовании SIGNAL а также SLOT макросы, вы не должны называть аргументы, только их типы.

Это не верно:

QObject::connect(websocket, SIGNAL(error(QAbstractSocket::SocketError error)),cp, SLOT(OnWebSocketError(QAbstractSocket::SocketError error)));

Это правильно:

QObject::connect(websocket, SIGNAL(error(QAbstractSocket::SocketError)),cp, SLOT(OnWebSocketError(QAbstractSocket::SocketError)));

Также лучше не использовать макросы, а использовать новый синтаксис, принимающий указатели на функции, таким образом выполняется некоторая проверка времени компиляции.

QObject::connect(websocket, &QWebSocket::error, cp, &CustomPritner::OnWebSocketError);

Помните, что вы всегда должны использовать QObject* в качестве аргументов, иначе он не будет компилироваться.

Другие вопросы по тегам