C++ 如何捕获websocket连接错误
我正在从Qt/c++客户端打开一个urlC++ 如何捕获websocket连接错误,c++,qt,websocket,C++,Qt,Websocket,我正在从Qt/c++客户端打开一个url m_webSocket = new QWebSocket(); m_webSocket->open("wss://192.123.1.44:8087"); 我想捕捉任何连接错误。我该怎么做? 我已连接到signalQWebSocket:error(QAbstractSocket::SocketError),但即使我的服务器未运行,也从未触发它 编辑: 我正在连接错误信号,如下所示 m_webSocket = new QWebSocket(); c
m_webSocket = new QWebSocket();
m_webSocket->open("wss://192.123.1.44:8087");
我想捕捉任何连接错误。我该怎么做?
我已连接到signalQWebSocket:error(QAbstractSocket::SocketError)
,但即使我的服务器未运行,也从未触发它
编辑:
我正在连接错误信号,如下所示
m_webSocket = new QWebSocket();
connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError error)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError error)));
m_webSocket->open(url);
这似乎不起作用。在打开插座之前,先连接QWebSocket信号
QWebSocket* pWebSocket = new QWebSocket;
connect(pWebSocket, &QWebSocket::error, [=](QAbstractSocket::SocketError error)
{
// Handle error here...
qDebug() << pWebSocket->errorString();
}
pWebSocket->open("wss://192.123.1.44:8087");
由于返回包含的,您可以检查连接调用的返回,以确保找到有效的信号和插槽,并提供有效的参数:-
// Old-style connection
if(!connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError))) )
{
qDebug() << "Failed to connect to QWebSocket::error" << endl;
}
//旧式连接
如果(!connect(m_webSocket,SIGNAL(error(QAbstractSocket::SocketError)),则此插槽(onWebSocketError(QAbstractSocket::SocketError)))
{
qDebug()如中所述:
注意:信号错误在此类中被重载。要使用函数指针语法连接到此信号,Qt提供了一个方便的助手来获取函数指针,如本例所示:
connect(webSocket,QOverload::of(&QWebSocket::error),
[=](QAbstractSocket::SocketerError错误){/*…*/});
当然,您可以连接到普通的lambda函数,而不是lambda函数,但是QOverload
部分很重要。谢谢您的回答。我已经编辑了我的问题。请看一看,让我知道这是否是处理错误信号的正确方法。是的,但是如果您使用的是Qt 5,最好使用新的连接语法,它将如果错误,则在编译时出错;connect(m_webSocket,&QWebSocket::error,this,&MyClass::onWebSocketError);我已连接到编辑中提到的错误信号。仍然无法捕获错误。如果您正在使用Qt信号和插槽宏,请检查连接调用的返回。我仍然无法解决问题。这是我需要的魔法。我无法让编译器停止抱怨。谢谢。非常欢迎!
// Old-style connection
if(!connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError))) )
{
qDebug() << "Failed to connect to QWebSocket::error" << endl;
}
connect(webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error),
[=](QAbstractSocket::SocketError error){ /* ... */ });