0
点赞
收藏
分享

微信扫一扫

Qt项目天气预报(3) - qt的http编程获取天气数据

概念


Qt中的HTTP编程主要涉及使用Qt的网络模块来进行HTTP请求和处理HTTP响应。Qt提供了一系列类来处理网络通信,其中最常用的类是 QNetworkAccessManager QNetworkRequest QNetworkReply 以及相关的支持类。

编程实例


以下是一个基本的HTTP编程示例,展示了如何使用Qt发送一个简单的HTTP GET请求并处理响应:

我们使用 QNetworkAccessManager 的 get 方法发送了一个HTTP GET请求到"http://exa
mple.com"。然后,我们连接了 QNetworkReply 对象的 finished 信号到一个lambda函数,该函数在收
到HTTP响应时被调用。

注:
  进行http请求之前要先把  network 添加到pro文件中

获取天气信息的url:

初始化network对象

构造函数

    //由QNetworkAccessManager 发起request请求:
    //实例化network对象
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    connect(manager, &QNetworkAccessManager::finished,[](){
        qDebug()<<"manager Finnish!";
    });
   QUrl urlItBoy("http://t.weather.itboy.net/api/weather/city/101010100");
   //QNetworkRequest - 指定请求的url地址
   QNetworkRequest res(urlItBoy); //根据网址实例化QUrl对象,再根据这个对象实例化QNetworkRequest对象
   reply = manager->get(res);
   //网络请求后进行信号读取
   connect(reply,&QNetworkReply::finished,this,&Widget::readHttpReply);

http网络请求后进行读取槽函数

//http网络请求后进行读取槽函数
void Widget::readHttpReply()
{
 //大多数服务器网址返回的编码格式是 utf-8,需要进行格式转化
 QByteArray data = reply->readAll();
 qDebug()<<QString::fromUtf8(data); // 将读到utf-8格式的数据转为QString类型进行输出
}

效果演示

如下图,我们通过http编程获取到网页上的数据了

http请求失败错误处理

修改槽函数,添加错误处理

//http网络请求后进行读取槽函数
void Widget::readHttpReply()
{

    int resCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();//404
    qDebug()<<resCode;
    if(reply->error() == QNetworkReply::NoError && resCode == 200){ // 没出错的情况下执行
        //大多数服务器网址返回的编码格式是 utf-8,需要进行格式转化
        QByteArray data = reply->readAll();
        qDebug()<<QString::fromUtf8(data); // 将读到utf-8格式的数据转为QString类型进行输出
    }
    else{
        //qDebug()<<"请求失败"<<reply->errorString();
        QMessageBox msg;
        msg.setWindowTitle("错误");
        msg.setText("网络请求失败!");
        msg.setStyleSheet("QPushButton{color:red};");//设置按钮样式
        msg.setStandardButtons(QMessageBox::Ok); //添加Ok按钮
        msg.exec();// 调用QMessageBox对象
    }
}

效果演示

状态码

请求成功:200

请求失败:404

举报

相关推荐

0 条评论