为啥我不能将 QWebsocket::error SIGNAL 连接到 lambda 或具有相同签名的任何其他 SLOT 类型? QT5.9 [重复]
Posted
技术标签:
【中文标题】为啥我不能将 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 [duplicate]为什么我不能将 QWebsocket::error SIGNAL 连接到 lambda 或具有相同签名的任何其他 SLOT 类型? QT5.9 [重复] 【发布时间】:2019-06-26 12:50:03 【问题描述】:我正在尝试构建一个实现 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"
【问题讨论】:
如错误所说,删除连接中websocket
前面的&
使用connect(webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), this, &CustomPritner::OnWebSocketError);
我不能在主函数上下文中使用“this”关键字
@ionutgeorgesoran 然后使用connect(webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), cp, &CustomPritner::OnWebSocketError);
是的,这正是我需要的,谢谢!
【参考方案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*
作为参数,否则将无法编译。
【讨论】:
以上是关于为啥我不能将 QWebsocket::error SIGNAL 连接到 lambda 或具有相同签名的任何其他 SLOT 类型? QT5.9 [重复]的主要内容,如果未能解决你的问题,请参考以下文章