为什么我不能将 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"
使用 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*
作为参数,否则将无法编译。
我正在尝试构建一个实现 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"
使用 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*
作为参数,否则将无法编译。