为啥我不能将 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】:

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

【讨论】:

以上是关于为啥我不能将 QWebsocket::error SIGNAL 连接到 lambda 或具有相同签名的任何其他 SLOT 类型? QT5.9 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将属性转换为嵌套元素?

为啥我不能将 ToUpper() 应用于 OwnerNode?

为啥我不能将常量数组作为参数传递?

为啥我不能将UTF写入RMS?

为啥我不能将异步查询移动到方法中?

为啥我不能将字符串添加到结构中?