为什么我不能将 QWebsocket::error SIGNAL 连接到 lambda 或任何其他具有相同签名的 SLOT 类型? QT5.9

Why can't I connect QWebsocket::error SIGNAL to a lambda or any other SLOT type with identical signature? QT5.9

我正在尝试构建一个实现 QWebSocket 的简单程序,但是,我首先尝试做的是检查连接是否已启用。它没有抛出任何异常,因为我从未连接过错误信号,但我可以检查我的云服务器是否进行了任何连接尝试,并发现连接从未发生过。所以我尝试实现错误信号以查看问题的原因是什么,但我似乎无法将信号连接到我的打印功能。我的意思是我总是遇到编译时错误。如果有人知道我应该如何处理这个问题,请说出来!

我也这样试过。我没有收到任何编译时错误,但收到此运行时错误:

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

下面是 3 张图片来说明问题:

主文件:

错误信息:

自定义打印机class:

同时忽略 "qDebug()<<""

这是我遇到的错误

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

使用 SIGNALSLOT 宏时,您不能命名参数,只能命名它们的类型。

这是错误的:

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* 作为参数,否则将无法编译。