2

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

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

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

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

主文件: 图 1

错误信息: 图 2

自定义打印机类: 图 3

还要忽略“qDebug()<<”“<error();” 行现在已评论。

这是我得到的错误”

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

1 回答 1

2

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

这是错误的:

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

于 2019-06-26T13:00:39.270 回答