在打开套接字之前连接到 QWebSocket error 信号。
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");
请注意,此连接使用 lambda 函数,它需要 C++ 11。以通常的方式连接到插槽也可以。
如果没有 C++ 11,请使用标准 (Qt 5) 连接:-
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QUrl url);
protected slots:
void Error(QAbstractSocket::SocketError error);
private:
QWebSocket* pWebSocket;
};
MyClass::MyClass(QUrl url)
{
QWebSocket* pWebSocket = new QWebSocket;
connect(pWebSocket, &QWebSocket::error, pMyClass, &MyClass::Error);
m_webSocket->open(url);
}
由于QObject::connect 返回一个QMetaObjectConnection,其中包含一个overloaded bool operator,您可以检查连接调用的返回,以确保找到有效的信号和槽,并提供有效的参数:-
// Old-style connection
if(!connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError))) )
{
qDebug() << "Failed to connect to QWebSocket::error" << endl;
}
但是,这在很大程度上是多余的,因为失败的连接通常会在 Qt 的连接调用中产生调试输出,通知您此问题。
注意,在旧式连接语法中,参数列表不命名参数,只提供类型。添加名称会导致连接失败。