Qt天气预报系统实现HTTP请求

server/2025/1/16 1:52:56/
http://www.w3.org/2000/svg" style="display: none;">

Qt天气预报系统实现HTTP请求

  • 1、添加网请求络模块
  • 2、声明一个网络请求对象
  • 3、实例化一个网络请求对象
  • 4、连接网络请求获取的信号与槽
  • 5、新建一个网络请求获取的槽函数
  • 6、定义一个获取天气数据的函数
  • 7、在构造中,请求天气数据
  • 8、请求天气数据
  • 9、网络请求获取
  • 10 .h文件和.cpp文件
    • 10.1 .h文件
    • 10.2 .cpp文件

1、添加网请求络模块

点击.pro文件,把network加入进去

https://i-blog.csdnimg.cn/direct/95b48ac9c2414b809fa680fef841b3f7.png" alt="在这里插入图片描述" />

2、声明一个网络请求对象

重新构建一下项目

https://i-blog.csdnimg.cn/direct/4d4ae4d1754f4ff88ac148796d6ab263.png" alt="在这里插入图片描述" />

声明一个网络请求对象
private:Ui::MainWindow *ui;QMenu *quitMenu;                            //创建一个菜单指针QAction *quitAct;                           //定义一个动作QPoint moffset;                             //窗口移动时,鼠标与窗口左上角的偏移值QNetworkAccessManager *NetAccessManger;        //声明一个网络请求对象
鼠标放到QNetworkAccessManager 上,ALT+Enter 选择添加头文件

https://i-blog.csdnimg.cn/direct/b1228d8c086b4c4882ec83904a8a27ed.png" alt="在这里插入图片描述" />

3、实例化一个网络请求对象

NetAccessManger = new QNetworkAccessManager(this);          //实例化一个网络请求对象

4、连接网络请求获取的信号与槽

connect(NetAccessManger,&QNetworkAccessManager::finished,this,&MainWindow::readHttpReply);  //连接网络请求获取的信号与槽

5、新建一个网络请求获取的槽函数

public slots:void readHttpReply(QNetworkReply *reply);                       //新建一个网络请求获取的槽函数
ALT+Enter选择添加定义

https://i-blog.csdnimg.cn/direct/370ac860901f4f93ba6a6e3c29fdcac8.png" alt="在这里插入图片描述" />

鼠标放到QNetworkReply 上, ALT+Enter 选择添加头文件

https://i-blog.csdnimg.cn/direct/25e6c83096b542a1a9003e434a16895a.png" alt="在这里插入图片描述" />

6、定义一个获取天气数据的函数

protected:void mousePressEvent(QMouseEvent *event) override;      //重写鼠标点击事件函数void mouseMoveEvent(QMouseEvent *event) override;       //重写鼠标移动事件函数void getWeatherInfo(QString citycode);                  //获取天气数据
ALT+Enter选择添加定义

https://i-blog.csdnimg.cn/direct/b7d5c6bbf79d47ed8b2fddd145f93278.png" alt="在这里插入图片描述" />

7、在构造中,请求天气数据

//101010100是北京的城市编码
getWeatherInfo("101010100");

8、请求天气数据

//获取天气数据
void MainWindow::getWeatherInfo(QString citycode)
{QUrl url("http://t.weather.itboy.net/api/weather/city/" + citycode); //天气数据接口和城市编码NetAccessManger->get(QNetworkRequest(url));            //发送GET请求,获取数据}

9、网络请求获取

//网络请求获取
void MainWindow::readHttpReply(QNetworkReply *reply)
{int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();   //状态码//请求错误if(reply->error() != QNetworkReply::NoError || status_code != 200){qDebug() << reply->errorString().toLatin1().data();     //打印错误信息QMessageBox::warning(this,"天气","请求数据失败", QMessageBox::Ok);      //弹出警告信息框}//请求成功else{QByteArray byteArray = reply->readAll();        //读取服务器数据qDebug() << "read all:"<< byteArray.data();     //打印接收到的数据}reply->deleteLater();       //释放对象
}
鼠标放到QMessageBox 上, ALT+Enter 选择添加头文件

https://i-blog.csdnimg.cn/direct/0a19184fe6ac407896385a71fd7a8200.png" alt="在这里插入图片描述" />

运行,最后,请求到的数据长这样

https://i-blog.csdnimg.cn/direct/c8ba74a4cfa5479eabdfcc45825f7137.png" alt="在这里插入图片描述" />

10 .h文件和.cpp文件

10.1 .h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMenu>
#include <QMessageBox>
#include <QNetworkAccessManager>
#include <QNetworkReply>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void mousePressEvent(QMouseEvent *event) override;      //重写鼠标点击事件函数void mouseMoveEvent(QMouseEvent *event) override;       //重写鼠标移动事件函数void getWeatherInfo(QString citycode);                  //获取天气数据private slots:void on_pushButton_quit_clicked();          //关闭UI界面void onQuitActTriggered();                  //菜单被点击后的处理public slots:void readHttpReply(QNetworkReply *reply);                       //新建一个网络请求获取的槽函数private:Ui::MainWindow *ui;QMenu *quitMenu;                            //创建一个菜单指针QAction *quitAct;                           //定义一个动作QPoint moffset;                             //窗口移动时,鼠标与窗口左上角的偏移值QNetworkAccessManager *NetAccessManger;        //声明一个网络请求对象bool closePOPWindow();                      //关闭窗口的弹窗
};
#endif // MAINWINDOW_H

10.2 .cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QMouseEvent>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowFlag(Qt::FramelessWindowHint);
//    this->setLayout(ui->gridLayoutGlobal);      //让界面随着窗口变幻大小quitMenu = new QMenu(this);         //创建一个QMenu对象quitAct = new QAction(QIcon(":/widget/quit.png"), tr("退出"), this);     //定义一个退出动作quitMenu->addAction(quitAct);       //添加动作//    connect(quitMenu,&QMenu::triggered,this,[=]{
//        this->close();
//    });         //连接信号与槽connect(quitMenu,&QMenu::triggered,this,&MainWindow::onQuitActTriggered);   //连接菜单被触发的信号与槽NetAccessManger = new QNetworkAccessManager(this);          //实例化一个网络请求对象connect(NetAccessManger,&QNetworkAccessManager::finished,this,&MainWindow::readHttpReply);  //连接网络请求获取的信号与槽//101010100是北京的城市编码getWeatherInfo("101010100");}MainWindow::~MainWindow()
{delete ui;
}//鼠标点击
void MainWindow::mousePressEvent(QMouseEvent *event)
{//如果右键被按下if(event->button() == Qt::RightButton){quitMenu->exec(QCursor::pos());       //在当前鼠标位置显示菜单}//当前鼠标位置 event->globalPos()//当前窗口位置 this->pos()if(event->button() == Qt::LeftButton){moffset = event->globalPos() - this->pos();}
}//鼠标移动
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - moffset);    //移动窗口
}//弹窗
bool MainWindow::closePOPWindow()
{// 创建一个消息框询问用户是否真的要退出QMessageBox mes;mes.setWindowTitle("关闭窗口");//  mes.setWindowFlags(Qt::Drawer);       //把标题栏去掉mes.setIcon(QMessageBox::Warning);    //设置一个警告图片mes.setText("是否关闭窗口?");          //弹窗文本mes.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);     //设置两个按钮mes.setWindowIcon(QIcon(":/widget/dog.png")); // 设置窗口图标mes.setButtonText(QMessageBox::Ok, tr("确定"));               //ok改为确认mes.setButtonText(QMessageBox::Cancel, tr("取消"));           //Cancel改为取消// 显示消息框并等待用户交互int result = mes.exec();// 根据用户的选择执行相应的操作if (result == QMessageBox::Ok) {// 用户选择了确定,关闭主窗口this->close();return true;}// 用户选择了取消,不关闭主窗口else{return false;     // 窗口关闭操作失败}
}//右上角退出
void MainWindow::on_pushButton_quit_clicked()
{closePOPWindow();
}//鼠标右键退出
void MainWindow::onQuitActTriggered()
{closePOPWindow();
}//获取天气数据
void MainWindow::getWeatherInfo(QString citycode)
{QUrl url("http://t.weather.itboy.net/api/weather/city/" + citycode);     //天气数据接口和城市编码NetAccessManger->get(QNetworkRequest(url));                    //发送GET请求,获取数据}//网络请求获取
void MainWindow::readHttpReply(QNetworkReply *reply)
{int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();   //状态码//请求错误if(reply->error() != QNetworkReply::NoError || status_code != 200){qDebug() << reply->errorString().toLatin1().data();     //打印错误信息QMessageBox::warning(this,"天气","请求数据失败", QMessageBox::Ok);      //弹出警告信息框}//请求成功else{QByteArray byteArray = reply->readAll();        //读取服务器数据qDebug() << "read all:"<< byteArray.data();     //打印接收到的数据}reply->deleteLater();       //释放对象
}

实现HTTP请求完成!

http://www.ppmy.cn/server/158093.html

相关文章

详解数据增强中的平移shft操作

Shift 平移是指在数据增强&#xff08;data augmentation&#xff09;过程中&#xff0c;通过对输入图像或目标进行位置偏移&#xff08;平移&#xff09;&#xff0c;让目标在图像中呈现出不同的位置。Shift 平移的目的是增加训练数据的多样性&#xff0c;从而提高模型对目标在…

VSCode配置php开发环境

我偷偷地告诉你&#xff0c; 有一个地方叫做稻城&#xff0c;我要和我最心爱的人一起去到那里... 2025.1.10 声明 仅作为个人学习使用&#xff0c;仅供参考 不知道如何配置php本地环境的&#xff0c;请翻阅 笔者的上一篇文章 正文 VSCode安装 官网&#xff1a;Download Vis…

Python学习(三)基础入门(数据类型、变量、条件判断、模式匹配、循环)

目录 一、第一个 Python 程序1.1 命令行模式、Python 交互模式1.2 Python的执行方式1.3 SyntaxError 语法错误1.4 输入和输出 二、Python 基础2.1 Python 语法2.2 数据类型1&#xff09;Number 数字2&#xff09;String 字符串3&#xff09;List 列表4&#xff09;Tuple 元组5&…

uniapp页面高度设置(铺满可视区域、顶部状态栏高度、底部导航栏高度)

这里说几种在uniapp开发中,关于页面设置高度的几种情况。宽度就不说了哈,宽度设置百分比都会生效。 首先我们要知道平时开发中,如果说没在uniapp做特殊处理,即正常情况下,所有的页面(.vue文件)中都是没有高度的(和vue一样),也就是说给最外层的的view标签设置高度为1…

Vue 中,使用 v-for 和 v-if 在同一个元素上时,出现报错,怎么解决

直接上报错图&#xff1a; 上图所示&#xff0c;其实就是 因为 v-for 的优先级比 v-if 高&#xff0c;Vue 会先尝试遍历 v-for 里面&#xff0c;然后再检查 v-if 的条件&#xff0c;这可能会导致意外的行为或错误。 解决办法有两种&#xff1a; 1.常见办法&#xff0c;也就是…

利用ArcGIS快速准确地统计出地块的现状容积率

研究目的 根据建筑.dwg、建筑.dwg Annotation、建筑.dwg Polygon&#xff0c;地籍边界.shp等数据&#xff0c;利用GIS快速准确地统计出地块的现状容积率。 研究思路 加载数据图层&#xff1a;建筑.dwg Polygon、建筑.dwg Annotation&#xff0c;使用空间连接功能把建筑层数数…

1. 使用springboot做一个音乐播放器软件项目【前期规划】

背景&#xff1a; 现在大部分音乐软件都是要冲会员才可以无限常听的。对于喜欢听音乐的小伙伴&#xff0c;资金又比较紧张&#xff0c;是那么的不友好。作为程序员的我&#xff0c;也是喜欢听着歌&#xff0c;敲着代码。 最近就想做一个音乐播放器的软件&#xff0c;在内网中使…

利用开源AI智能名片2+1链动模式S2B2C商城小程序拓展社交电商的深度实践探索

摘要&#xff1a;在数字化浪潮席卷全球的今天&#xff0c;社交电商作为一种新兴的商业模式&#xff0c;正以前所未有的速度改变着消费者的购物习惯与商家的营销策略。本文深入探讨了开源AI智能名片21链动模式S2B2C商城小程序在社交电商领域的应用&#xff0c;通过分析其核心机制…