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

Qt4.1中QHttp::requestFinished信号槽连接成功但槽函数未触发问题

问题分析与解决

核心问题:信号连接晚于请求发送

你在构造函数里先调用http->request(header)发起请求,之后才执行connect绑定信号槽。此时请求可能已同步完成(或信号已发出),但槽函数还未完成绑定,自然接收不到requestFinished信号。

修复步骤

  1. 调整顺序:先绑定信号槽,再发起请求
    将connect代码移到request调用之前,确保信号槽在请求发送前完成绑定:

    Status::Status()
    {
        QHttp *http = new QHttp("plaza.one");
    
        // 先绑定信号槽
        bool what = QObject::connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(onRequestFinished(int, bool)));
        std::cout << what << std::endl;
    
        // 再构造请求并发送
        QHttpRequestHeader header("GET", "/status");
        header.setValue("Host", "plaza.one");
        http->request(header);
    }
    
  2. 保障QHttp对象的生命周期
    你用new创建的QHttp对象未设置父对象,也未作为类成员保存。若请求完成前http对象意外销毁,会导致槽无法触发。建议将QHttp *http设为Status类的成员变量,或设置父对象为this:

    // 在Status类的private成员中添加:
    QHttp *m_http;
    
    // 构造函数中修改:
    m_http = new QHttp("plaza.one", this); // 设置父对象为this,由Qt自动管理内存
    
  3. 确认事件循环正常运行
    Qt信号槽依赖事件循环,确保程序主函数中存在QApplication::exec()调用,否则事件无法分发,槽函数不会被触发。

额外提示

Qt4.1的QHttp属于老旧类,使用时注意:

  • 处理请求错误可通过QHttp::error()获取错误类型
  • 读取响应内容可在onRequestFinished中调用http->readAll()获取返回数据

内容的提问来源于stack exchange,提问作者ioi-xd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:02:46