2015-10-08 3 views
4

я открываю URL из/C++ клиент Qt как,Как поймать ошибку соединения WebSocket

m_webSocket = new QWebSocket(); 
m_webSocket->open("wss://192.123.1.44:8087"); 

Я хочу, чтобы поймать любые ошибки в связи. Как мне это сделать? Я подключился к сигналу QWebSocket:error(QAbstractSocket::SocketError error), но никогда не запускал его, даже если мой сервер не работает.

Edit: Я подключение к сигналу ошибки, как показано ниже,

m_webSocket = new QWebSocket(); 
connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError error)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError error))); 
m_webSocket->open(url); 

Это, кажется, не работает.

ответ

5

Подключите к сигналу 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"); 

Обратите внимание, что это соединение использует функцию лямбда, которая требует C++ 11. Также будет работать соединение с слотом в обычном режиме.

Без C++ 11, использовать стандарт (5 Qt) Подключение: -

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; 
} 

Однако во многом это излишним, поскольку неудачная соединение обычно производит вывод отладки информирующее этого я ssue, из вызова соединения Qt.

ПРИМЕЧАНИЕ. В синтаксисе соединения старого типа список аргументов не называет аргументы, предоставляется только тип. Добавление имени приведет к сбою соединения.

+0

Спасибо за ответ. Я отредактировал свой вопрос. Пожалуйста, посмотрите и дайте мне знать, если это правильный способ обработки сигнала ошибки. – gaj

+0

Да, но если вы используете Qt 5, лучше использовать новый синтаксис подключения, который будет ошибкой во время компиляции, если это неправильно; * connect (m_webSocket, & QWebSocket :: error, this, & MyClass :: onWebSocketError); * – TheDarkKnight

+0

Я подключился к сигналу ошибки, как указано в разделе редактирования. Все еще не в состоянии поймать ошибку. – gaj

Смежные вопросы