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

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

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

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

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

Основной файл: image 1

Сообщение об ошибке: image 2

Класс CustomPrinter: image 3

Также игнорируйте "qDebug()‹‹""‹error();" строка сейчас закомментирована.

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

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

person ionut george soran    schedule 26.06.2019    source источник
comment
Как говорит ошибка, удалите & перед websocket в соединении   -  person Dimitry Ernot    schedule 26.06.2019
comment
используйте 1_   -  person eyllanesc    schedule 26.06.2019
comment
Я не могу использовать это ключевое слово в контексте основной функции   -  person ionut george soran    schedule 26.06.2019
comment
@ionutgeorgesoran, тогда используйте connect(webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), cp, &CustomPritner::OnWebSocketError);   -  person eyllanesc    schedule 26.06.2019
comment
Да, это именно то, что мне было нужно, спасибо!   -  person ionut george soran    schedule 26.06.2019


Ответы (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* в качестве аргументов, иначе он не скомпилируется.

person SilvanoCerza    schedule 26.06.2019