news 2026/7/10 18:04:07

QtWeatherApp - 简单天气预报软件(C++ Qt6)(附源码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QtWeatherApp - 简单天气预报软件(C++ Qt6)(附源码)

QtWeatherApp - 简单天气预报软件

一个使用Qt 6 + C++开发的桌面天气预报应用。从零开始实现,支持输入城市名称查询当前天气和未来7天预报。

(以上截图为 Qt 天气应用,实际界面为简洁的 Qt 布局,包括城市输入框、查询按钮、当前天气标签和预报列表)

前提条件

第一步

我们使用 Open-Meteo 免费天气 API(无需 API Key,非商业免费使用,数据准确):

当前天气 + 7 天预报:https://api.open-meteo.com/v1/forecast?latitude=纬度&longitude=经度&current=temperature_2m,weather_code&daily=temperature_2m_max,temperature_2m_min,weather_code&timezone=auto

第二步

注册 OpenWeatherMap 获取免费 API Key:https://openweathermap.org/api (只需邮箱注册,立即可用)

首先需要通过城市名获取经纬度,我们使用另一个免费 API:OpenWeatherMap 的 Geocoding API(免费注册后获取 API Key,支持每天 1000 次调用):

http://api.openweathermap.org/geo/1.0/direct?q=城市名&limit=1&appid=你的KEY

大体思路

我们共同第二步获取的api可以在该网站获取到城市坐标,而第一步中的免费天气正只需要经纬度坐标输入来获取天气输出

功能特点

  • 输入城市名称(支持中文或英文,如 “Beijing” 或 “Shanghai,CN”)
  • 以下为获取地理数据返回 经纬度
voidMainWindow::onGeoReplyFinished(QNetworkReply*reply){if(reply->error()!=QNetworkReply::NoError){QMessageBox::critical(this,"错误","位置查询失败: "+reply->errorString());reply->deleteLater();return;}QByteArray data=reply->readAll();QJsonDocument doc=QJsonDocument::fromJson(data);QJsonArray array=doc.array();if(array.isEmpty()){QMessageBox::warning(this,"错误","未找到该城市!");reply->deleteLater();return;}QJsonObject obj=array.first().toObject();doublelat=obj["lat"].toDouble();doublelon=obj["lon"].toDouble();QString cityName=obj["name"].toString()+", "+obj["country"].toString();reply->deleteLater();QString weatherUrl=QString("https://api.open-meteo.com/v1/forecast?""latitude=%1&longitude=%2""&current=temperature_2m,weather_code""&daily=temperature_2m_max,temperature_2m_min,weather_code""&timezone=auto").arg(lat).arg(lon);weatherManager->get(QNetworkRequest(QUrl(weatherUrl)));ui->currentWeatherLabel->setText(QString("正在加载 %1 的天气...").arg(cityName));}
  • 以下为通过经纬度获取该地天气(会有误差,上面的城市搜索智能返回一个经纬度,而下面的天气查询是通过上面的一个坐标来获取温度,所以会有误差)
  • 有点全球所有城市都能查询天气
voidMainWindow::onWeatherReplyFinished(QNetworkReply*reply){if(reply->error()!=QNetworkReply::NoError){QMessageBox::critical(this,"错误","天气查询失败: "+reply->errorString());reply->deleteLater();return;}QByteArray data=reply->readAll();QJsonDocument doc=QJsonDocument::fromJson(data);QJsonObject root=doc.object();// 当前天气QJsonObject current=root["current"].toObject();doubletemp=current["temperature_2m"].toDouble();intcode=current["weather_code"].toInt();ui->currentWeatherLabel->setText(QString("当前天气:%1°C,%2").arg(temp,0,'f',1).arg(weatherDescription(code)));// 预报ui->forecastList->clear();QJsonObject daily=root["daily"].toObject();QJsonArray dates=daily["time"].toArray();QJsonArray maxT=daily["temperature_2m_max"].toArray();QJsonArray minT=daily["temperature_2m_min"].toArray();QJsonArray codes=daily["weather_code"].toArray();for(inti=0;i<dates.size();++i){QString date=dates[i].toString();doublemax=maxT[i].toDouble();doublemin=minT[i].toDouble();intc=codes[i].toInt();ui->forecastList->addItem(QString("%1: 最高 %2°C,最低 %3°C,%4").arg(date).arg(max,0,'f',1).arg(min,0,'f',1).arg(weatherDescription(c)));}reply->deleteLater();}
  • 显示当前温度和天气描述
  • 显示未来7天每日最高/最低温度及天气描述
  • 使用免费天气 API,无广告
  • 纯 C++ 实现,学习 Qt 网络请求、JSON 解析的优秀示例

技术栈

  • Qt 6.x(Widgets 模块 + Network 模块)
  • C++17
  • 天气数据来源:
    • 经纬度查询:OpenWeatherMap Geocoding API(需免费 API Key)
    • 天气预报:Open-Meteo API(完全免费,无需 Key)

环境要求

  • Qt 6.x(推荐使用 Qt Creator)
  • 支持 Windows / macOS / Linux

构建与运行

  1. 打开 Qt Creator,加载项目(WeatherApp.pro
  2. mainwindow.cpp中替换 API Key:
    QString apiKey="你的OpenWeatherMap_API_Key";// 替换成你的Key
    (注册地址:https://home.openweathermap.org/api_keys)
  3. 编译并运行(Ctrl + R)

使用方法

  1. 启动程序
  2. 在输入框中输入城市名称(如Beijing
  3. 点击“查询天气”按钮
  4. 查看当前天气和未来预报列表

项目结构

WeatherApp/ ├── main.cpp ├── mainwindow.h ├── mainwindow.cpp ├── mainwindow.ui

扩展建议

  • 添加天气图标显示(下载 WMO 天气代码对应图标)
  • 支持自动定位(集成 Qt Positioning 模块)
  • 添加缓存机制,避免重复请求
  • 美化界面(使用样式表或 QSS)

github源码下载


github源码下载:https://github.com/mojoin/weather_forecast

gitee源码下载


gitee源码下载:https://gitee.com/lclIzzxw/weather_forecast

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 13:32:54

I2C与SPI

它们是嵌入式系统和电子设备中两种最重要、最常用的串行通信协议,用于在芯片之间进行短距离、板级的数据交换。 我们可以把它们想象成设备之间“对话”的两种不同方式,各有各的规则和适用场景。 1、I2C(Inter-Integrated Circuit,集成电路总线) I2C是一种多主从、半双工…

作者头像 李华
网站建设 2026/7/10 9:54:51

配电网中的拥塞管理Congestion Management in Distribution Networks

核心定义 配电网中的拥塞管理&#xff0c;是指配电系统运营商&#xff08;DSO&#xff09;采取一系列技术和经济措施&#xff0c;预防、检测和消除配电网中关键设备&#xff08;如线路、电缆、变压器&#xff09;出现的过载或运行越限&#xff0c;以确保电网安全、可靠、高效运…

作者头像 李华
网站建设 2026/7/9 10:37:33

中华人民共和国劳动合同法

官网:中华人民共和国劳动合同法_中国人大网 第一章 总  则 第一条 为了完善劳动合同制度,明确劳动合同双方当事人的权利和义务,保护劳动者的合法权益,构建和发展和谐稳定的劳动关系,制定本法。 第二条 中华人民共和国境内的企业、个体经济组织、民办非企业单位等组…

作者头像 李华
网站建设 2026/7/9 17:36:57

Kotaemon HTTPS 部署教程:SSL证书配置全流程

Kotaemon HTTPS 部署与 SSL 证书配置实战指南 在企业级智能对话系统逐步渗透金融、医疗、政务等高敏感场景的今天&#xff0c;数据传输安全已不再是“可选项”&#xff0c;而是构建可信 AI 服务的基石。Kotaemon 作为专注于生产级 RAG&#xff08;检索增强生成&#xff09;与复…

作者头像 李华
网站建设 2026/7/10 16:15:40

【dz-956】基于单片机的公交车系统

摘要 随着城市公共交通的快速发展&#xff0c;公交车作为市民出行的主要方式之一&#xff0c;其运营效率与服务质量备受关注。传统公交车系统在站点播报、信息展示等方面存在依赖人工操作、信息更新滞后、功能单一等问题&#xff0c;难以满足乘客对精准出行信息的需求&#xf…

作者头像 李华
网站建设 2026/7/8 23:08:49

SECS/GEM通信实战指南:Python实现半导体设备智能监控系统

在半导体制造车间中&#xff0c;你是否经常面临这样的困境&#xff1a;设备突然停机&#xff0c;却无法快速定位问题根源&#xff1b;生产数据分散在多个系统中&#xff0c;难以形成统一分析&#xff1b;设备状态监控依赖人工巡检&#xff0c;效率低下且容易遗漏&#xff1f;这…

作者头像 李华