微网站建设教程视频教程,泰安人才网,锦州电脑网站建设,hide my wordpressQtWeatherApp - 简单天气预报软件
一个使用 Qt 6 C 开发的桌面天气预报应用。从零开始实现#xff0c;支持输入城市名称查询当前天气和未来7天预报。 #xff08;以上截图为 Qt 天气应用#xff0c;实际界面为简洁的 Qt 布局#xff0c;包括城市输入框、查询按钮、当前天…QtWeatherApp - 简单天气预报软件一个使用Qt 6 C开发的桌面天气预报应用。从零开始实现支持输入城市名称查询当前天气和未来7天预报。以上截图为 Qt 天气应用实际界面为简洁的 Qt 布局包括城市输入框、查询按钮、当前天气标签和预报列表前提条件第一步我们使用 Open-Meteo 免费天气 API无需 API Key非商业免费使用数据准确当前天气 7 天预报https://api.open-meteo.com/v1/forecast?latitude纬度longitude经度currenttemperature_2m,weather_codedailytemperature_2m_max,temperature_2m_min,weather_codetimezoneauto第二步注册 OpenWeatherMap 获取免费 API Keyhttps://openweathermap.org/api 只需邮箱注册立即可用首先需要通过城市名获取经纬度我们使用另一个免费 APIOpenWeatherMap 的 Geocoding API免费注册后获取 API Key支持每天 1000 次调用http://api.openweathermap.org/geo/1.0/direct?q城市名limit1appid你的KEY大体思路我们共同第二步获取的api可以在该网站获取到城市坐标,而第一步中的免费天气正只需要经纬度坐标输入来获取天气输出功能特点输入城市名称支持中文或英文如 “Beijing” 或 “Shanghai,CN”以下为获取地理数据返回 经纬度voidMainWindow::onGeoReplyFinished(QNetworkReply*reply){if(reply-error()!QNetworkReply::NoError){QMessageBox::critical(this,错误,位置查询失败: reply-errorString());reply-deleteLater();return;}QByteArray datareply-readAll();QJsonDocument docQJsonDocument::fromJson(data);QJsonArray arraydoc.array();if(array.isEmpty()){QMessageBox::warning(this,错误,未找到该城市);reply-deleteLater();return;}QJsonObject objarray.first().toObject();doublelatobj[lat].toDouble();doublelonobj[lon].toDouble();QString cityNameobj[name].toString(), obj[country].toString();reply-deleteLater();QString weatherUrlQString(https://api.open-meteo.com/v1/forecast?latitude%1longitude%2currenttemperature_2m,weather_codedailytemperature_2m_max,temperature_2m_min,weather_codetimezoneauto).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 datareply-readAll();QJsonDocument docQJsonDocument::fromJson(data);QJsonObject rootdoc.object();// 当前天气QJsonObject currentroot[current].toObject();doubletempcurrent[temperature_2m].toDouble();intcodecurrent[weather_code].toInt();ui-currentWeatherLabel-setText(QString(当前天气%1°C%2).arg(temp,0,f,1).arg(weatherDescription(code)));// 预报ui-forecastList-clear();QJsonObject dailyroot[daily].toObject();QJsonArray datesdaily[time].toArray();QJsonArray maxTdaily[temperature_2m_max].toArray();QJsonArray minTdaily[temperature_2m_min].toArray();QJsonArray codesdaily[weather_code].toArray();for(inti0;idates.size();i){QString datedates[i].toString();doublemaxmaxT[i].toDouble();doubleminminT[i].toDouble();intccodes[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 模块)C17天气数据来源经纬度查询OpenWeatherMap Geocoding API需免费 API Key天气预报Open-Meteo API完全免费无需 Key环境要求Qt 6.x推荐使用 Qt Creator支持 Windows / macOS / Linux构建与运行打开 Qt Creator加载项目WeatherApp.pro在mainwindow.cpp中替换 API KeyQString apiKey你的OpenWeatherMap_API_Key;// 替换成你的Key注册地址https://home.openweathermap.org/api_keys编译并运行Ctrl R使用方法启动程序在输入框中输入城市名称如Beijing点击“查询天气”按钮查看当前天气和未来预报列表项目结构WeatherApp/ ├── main.cpp ├── mainwindow.h ├── mainwindow.cpp ├── mainwindow.ui扩展建议添加天气图标显示下载 WMO 天气代码对应图标支持自动定位集成 Qt Positioning 模块添加缓存机制避免重复请求美化界面使用样式表或 QSSgithub源码下载github源码下载:https://github.com/mojoin/weather_forecastgitee源码下载gitee源码下载:https://gitee.com/lclIzzxw/weather_forecast