You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QT中QWebSocket.open函数使用问题及参数配置咨询

QT QWebSocket 连接配置与消息发送解决方案

一、修复核心连接代码

你的现有代码存在两个关键问题:调用了aboutToClose()(这是信号而非主动关闭方法),且未配置自定义请求头。以下是修正后的连接代码:

void MainWindow::onWatchListChanged()
{  
    // 主动关闭现有连接(替换错误的aboutToClose()调用)
    if (m_webSocket.isOpen()) {
        m_webSocket.close();
    }

    QUrl wsUrl("ws://rt.test.com/ws2/");
    QNetworkRequest request(wsUrl);
    // 添加Postman中设置的token请求头
    request.setRawHeader("token", "weirskldlfjoew");

    qDebug() << "连接目标地址:" << wsUrl;
    m_webSocket.open(request);
}

二、连接成功后发送订阅消息

需要监听connected()信号,确保连接建立完成后再发送Postman中的订阅消息。首先在类初始化(如构造函数)中绑定信号槽:

// MainWindow构造函数内添加
connect(&m_webSocket, &QWebSocket::connected, this, &MainWindow::onWebSocketConnected);
connect(&m_webSocket, &QWebSocket::disconnected, this, &MainWindow::onWebSocketDisconnected);
// 绑定错误信号用于排查问题
connect(&m_webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::errorOccurred), 
        this, &MainWindow::onWebSocketError);

然后实现消息发送的槽函数:

void MainWindow::onWebSocketConnected()
{
    qDebug() << "WebSocket连接成功";
    // 构造Postman中的订阅消息(使用Raw字符串避免转义问题)
    const QString subscribeMsg = R"({"channels": ["I1-23", "I1035-23"]})";
    // 发送文本消息
    m_webSocket.sendTextMessage(subscribeMsg);
}

三、错误排查辅助实现

添加错误与断开连接的处理槽,方便定位问题:

void MainWindow::onWebSocketError(QAbstractSocket::SocketError error)
{
    qDebug() << "WebSocket错误信息:" << m_webSocket.errorString();
}

void MainWindow::onWebSocketDisconnected()
{
    qDebug() << "WebSocket连接断开";
}

关键注意事项

  • 不要调用aboutToClose():这是QWebSocket发出的通知信号,用于告知外部即将关闭连接,不是主动关闭连接的方法,主动关闭请用close()。
  • 自定义Header必须通过QNetworkRequest:直接调用open(QUrl)无法设置请求头,必须封装为QNetworkRequest对象传入。
  • 消息发送时机:订阅消息必须在connected()信号触发后发送,避免连接未建立时发送失败。

内容的提问来源于stack exchange,提问作者steven cn2018

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:57:33