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

时间:2019-06-26 12:50:03

标签: c++ qt qt5.9 qtwebsockets

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

我也尝试过这样。我没有任何编译时错误,但是却遇到了此运行时错误:

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

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

主文件: image 1

错误消息: image 2

CustomPrinter类: image 3

也请注意“ qDebug()<<”“

这是我遇到的错误”

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

1 个答案:

答案 0 :(得分:1)

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