我正在打开Qt/c ++客户端的网址,比如
m_webSocket = new QWebSocket();
m_webSocket->open("wss://192.123.1.44:8087");
Run Code Online (Sandbox Code Playgroud)
我想抓住任何连接错误.我怎么做?我已连接到信号QWebSocket:error(QAbstractSocket::SocketError error),但即使我的服务器没有运行,我也从未触发它.
编辑:我正在连接错误信号如下,
m_webSocket = new QWebSocket();
connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError error)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError error)));
m_webSocket->open(url);
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用.
在打开插座之前连接到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");
Run Code Online (Sandbox Code Playgroud)
请注意,此连接使用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);
}
Run Code Online (Sandbox Code Playgroud)
当QObject :: connect返回包含重载bool运算符的QMetaObjectConnection时,您可以检查从connect调用的返回,以确保找到有效的信号和槽,并提供有效的参数: -
// Old-style connection
if(!connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onWebSocketError(QAbstractSocket::SocketError))) )
{
qDebug() << "Failed to connect to QWebSocket::error" << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,这在很大程度上是多余的,因为失败的连接通常会产生调试输出,从Qt的connect调用中通知您这个问题.
注意,在旧式连接语法中,参数列表不命名参数,仅提供类型.添加名称将导致连接失败.
如文档中所述:
注意:信号错误在这个类中被重载。为了使用函数指针语法连接到这个信号,Qt 提供了一个方便的助手来获取函数指针,如下例所示:
connect(webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error),
[=](QAbstractSocket::SocketError error){ /* ... */ });
Run Code Online (Sandbox Code Playgroud)
当然,您可以连接到一个普通的函数,而不是 lambda 函数,但这QOverload部分很重要。
| 归档时间: |
|
| 查看次数: |
3700 次 |
| 最近记录: |