Почему я не могу подключить QWebsocket::error SIGNAL к лямбде или любому другому типу слота с идентичной подписью? QT5.9
Я пытаюсь создать простую программу, которая реализует QWebSocket, однако сначала я попытался проверить, включено ли соединение. Это не выдает никаких исключений, так как я никогда не подключал сигнал ошибки, но я мог проверить на своем облачном сервере, была ли предпринята какая-либо попытка подключения, и увидел, что соединение никогда не происходило. Поэтому я попытался реализовать сигнал об ошибке, чтобы понять причину проблемы, но не могу подключить сигнал к моей функции печати. Я имею в виду, что всегда получаю ошибку времени компиляции. Если у кого-то есть идеи о том, как мне к этому подойти, скажите, пожалуйста!
Я тоже так пробовал. Я не получаю никаких ошибок во время компиляции, однако я получаю эту ошибку времени выполнения:
QObject::connect(websocket, SIGNAL(error(QAbstractSocket::SocketError error)),cp, SLOT(OnWebSocketError(QAbstractSocket::SocketError error)));
Ниже приведены 3 изображения для иллюстрации проблемы:
Основной файл:
Сообщение об ошибке:
Класс CustomPrinter:
Также игнорируйте "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*
в качестве аргументов, иначе он не будет компилироваться.