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

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

QtWeatherApp - 简单天气预报软件

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

image

(以上截图为 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();double lat = obj["lat"].toDouble();double lon = 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();double temp = current["temperature_2m"].toDouble();int code = 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(int i =0; i < dates.size();++i){ QString date = dates[i].toString();double max = maxT[i].toDouble();double min = minT[i].toDouble();int c = 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. 编译并运行(Ctrl + R)

mainwindow.cpp 中替换 API Key:

QString apiKey ="你的OpenWeatherMap_API_Key";// 替换成你的Key

(注册地址:https://home.openweathermap.org/api_keys)

使用方法

  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

Read more

Python详细安装与环境搭建

Python详细安装与环境搭建

一. 下载python python官网:https://www.python.org/ 按照图片所示进行下载         其中, x86 的为 32 位安装包,x86-64 为 64 位安装包。Stable Releases为稳定版本,Pre-releases为预发行版。executable installer为完整的安装包,下载完即可脱网安装;web-based installer 体积更小,安装时仍需联网下载其他部分。 二. 安装 1.安装包形式 Install Now:默认当前账户安装,安装路径和内容是默认的。 Customize installation:自定义安装。 Install launcher for all users (recommended) / Use admin privileges when installing py.

By Ne0inhk
什么是python uv,如何在windows上安装uv,基础的用法有哪些?

什么是python uv,如何在windows上安装uv,基础的用法有哪些?

什么是Python UV? UV是由Astral公司(Rust工具Ruff的开发者)推出的高性能Python包管理工具,基于Rust编写,旨在替代传统的pip和pip-tools。其核心优势在于极快的速度(比pip快10-100倍)、轻量级设计(仅几十MB)以及现代化的依赖管理(支持pyproject.toml和uv.lock文件)。UV集成了虚拟环境管理、Python版本控制、依赖解析等功能,目标是成为类似Rust Cargo的全能工具,简化Python开发流程。 在Windows上安装UV的3种方法 使用Pipx(适合全局工具管理) 若已安装pipx: pipx install uv PowerShell脚本安装 打开PowerShell,执行: irm https://astral.sh/uv/install.ps1 |iex 通过PIP安装(推荐) 直接使用Python自带的pip安装,兼容性最佳: pip install uv 安装后,uv会被添加到系统环境变量,即使切换虚拟环境也能使用。 注意:

By Ne0inhk
【JAVA资料,C#资料,人工智能资料,Python资料】全网最全编程学习文档合集,从入门到全栈,保姆级整理!

【JAVA资料,C#资料,人工智能资料,Python资料】全网最全编程学习文档合集,从入门到全栈,保姆级整理!

文章目录 * 前言 * 一、编程学习前的准备 * 1.1 明确学习目标 * 1.2 评估自身基础 * 二、编程语言的选择 * 2.1 热门编程语言介绍 * 2.2 如何根据目标选择语言 * 三、编程基础学习 * 3.1 变量与数据类型 * 3.2 控制结构 * 3.3 函数 * 四、面向对象编程(OOP) * 4.1 OOP 基础概念 * 4.2 OOP 在实际项目中的应用 * 五、数据库基础 * 5.1 关系型数据库 * 5.2 非关系型数据库 * 六、Web

By Ne0inhk
Python从0到100完整学习指南(必看导航)

Python从0到100完整学习指南(必看导航)

前言:零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学业升学和工作就业的先行者! 【优惠信息】 • 新专栏订阅前1000名享9.9元优惠 • 订阅量破1000后价格上涨至19.9元 • 订阅本专栏可免费加入粉丝福利群,享受: - 所有问题解答 - 专属福利领取 欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程! 本文目录: * 一、Python基础与编程入门(第1-15篇) * 1.环境搭建与语法基础 * 2.数据结构基础篇 * 3.函数编程篇 * 二、面向对象与文件处理(第16-24篇) * 1.面向对象编程篇 * 2.标准库与文件处理篇 * 三、并发编程与网络爬虫(第25-39篇) * 1.并发编程基础篇

By Ne0inhk