用 Qt 6 和 C++ 做一个桌面天气预报程序
这是一个用 Qt 6 + C++ 写的桌面天气预报应用,思路很直接:先按城市名查经纬度,再拿坐标去换天气数据。能看当前温度,也能看未来 7 天预报。
先说接口
这里用了两个免费的 API,职责分开,代码会清楚很多。
Open-Meteo 负责天气查询,不需要 API Key,适合直接拿来做演示或个人小工具:
城市名转经纬度这一步,用的是 OpenWeatherMap 的 Geocoding API。它需要注册一个免费 Key,流程不复杂:
https://openweathermap.org/api
请求形式如下:
http://api.openweathermap.org/geo/1.0/direct?q=城市名&limit=1&appid=你的KEY
这个方案怎么走
应用启动后,用户输入城市名。程序先调用地理编码接口,拿到经纬度;再把这组坐标交给 Open-Meteo 拉天气。这里会有一点坐标级别的误差,但对桌面小工具来说够用了,换来的好处是覆盖范围很广,基本上能查到绝大多数城市。
功能点
- 输入城市名称,支持中文或英文,比如
Beijing、Shanghai,CN - 通过城市名获取经纬度
- 通过经纬度查询当前天气和 7 天预报
- 显示当前温度和天气描述
- 显示未来 7 天每日最高 / 最低温度及天气描述
- 使用免费天气 API,没有广告,也不需要自己维护天气源
- 纯 C++ 实现,适合拿来练 Qt 网络请求和 JSON 解析
地理编码结果出来后,代码会把返回的 lat 和 lon 拼成天气请求地址:
void MainWindow::onGeoReplyFinished(QNetworkReply *reply) {
if (reply->error() != QNetworkReply::NoError) {
QMessageBox::critical(this, "错误", "位置查询失败:" + reply->errorString());
reply->deleteLater();
return;
}
QByteArray data = reply->readAll();
QJsonDocument doc = QJsonDocument::(data);
QJsonArray array = doc.();
(array.()) {
QMessageBox::(, , );
reply->();
;
}
QJsonObject obj = array.().();
lat = obj[].();
lon = obj[].();
QString cityName = obj[].() + + obj[].();
reply->();
QString weatherUrl = (
).(lat).(lon);
weatherManager->(((weatherUrl)));
ui->currentWeatherLabel->(().(cityName));
}


