Qt天氣預報系統更新UI界面
- 1、創建各個小部分列表
- 2、定義一個更新UI函數
- 2.1 實現更新UI界面函數
1、創建各個小部分列表
QList<QLabel *> weekList; //星期
QList<QLabel *> dateList; //日期QList<QLabel *> weatherList; //天氣
QList<QLabel *> weatherIconList; //天氣圖標QList<QLabel *> airPollutionList; //空氣污染指數QList<QLabel *> windPowerList; //風力
QList<QLabel *> windTypeList; //風的類型
2、定義一個更新UI函數
void updateUI(); //更新UI界面
2.1 實現更新UI界面函數
//更新UI界面
void MainWindow::updateUI()
{// 當前日期處理QDate currentDate = QDate::fromString(today.date, "yyyyMMdd");if (!currentDate.isValid()) {qWarning() << "Invalid current date:" << today.date;return;}ui->labelCurrentDate->setText(currentDate.toString("yyyy/MM/dd") + " " + day[1].week);ui->labelCity->setText(today.city);
// ui->labelCurrentDate->setText(QDateTime::fromString(today.date,"yyyyMMdd").toString("yyyy/MM/dd")
// + " " + day[1].week); //當前日期// ui->labelCity->setText(today.city); //城市//今天ui->labelWeatherTypeP->setPixmap(weatherIconMap[today.weatherType]); //天氣圖標ui->labelTemperature->setText(QString::number(today.temperature)+"℃"); //溫度qDebug() <<today.temperature;ui->labelWeatherType->setText(today.weatherType); //天氣類型ui->labelTemperatureRange->setText(QString::number(today.lowTem) + "~" + QString::number(today.highTem) + "℃"); //溫度范圍ui->labelTips->setText(today.ganMao); //天氣小提示ui->labelWindTy->setText(today.windType); //風的類型ui->labelWindPr->setText(today.windPower); //風力ui->labelPM25Pr->setText(QString::number(today.PM25)); //PM2.5ui->labelHumidityPr->setText(today.Humidity); //濕度ui->labelAirqualityPr->setText(today.airQuality); //空氣質量//更新未來幾天
// const int maxDay = 7;const int maxDay = qMin(7, qMin(qMin(weekList.size(), dateList.size()),qMin(qMin(weatherList.size(), weatherIconList.size()),qMin(qMin(airPollutionList.size(), windDirectionList.size()),windPowerList.size()))));for(int i = 0; i < maxDay; i++){qDebug() << "Updating index:"<< i << ", date:" << day[i].date;// 邊界檢查if (i >= 7 || i >= weekList.size() || i >= dateList.size() ||i >= weatherList.size() || i >= weatherIconList.size() ||i >= airPollutionList.size() || i >= windDirectionList.size() ||i >= windPowerList.size()) {qWarning() << "Index out of range:" << i;continue;}// 設置昨天、今天、明天等標簽if(i == 0) {weekList[i]->setText("昨天"); // 直接設置第一天為昨天} else if(i == 1) {weekList[i]->setText("今天");} else if(i == 2) {weekList[i]->setText("明天");} else {weekList[i]->setText(day[i].week); // 后續顯示實際星期}//日期 2025-1-28
// QStringList ymdList = day[i].date.split("-"); //-作為分隔符
// qDebug() << day[i].date;
// dateList[i]->setText(ymdList[1] + "/" + ymdList[2]); //取月份和日期 1/28// 設置日期QStringList ymdList = day[i].date.split("-");if (ymdList.size() >= 3) {dateList[i]->setText(ymdList[1] + "/" + ymdList[2]);} else {dateList[i]->setText("N/A");}//天氣類型weatherList[i]->setText(day[i].weatherType); //天氣weatherIconList[i]->setPixmap(weatherIconMap[day[i].weatherType]); //天氣圖標//空氣質量if(day[i].airQuality >= 0 && day[i].airQuality<=50){airPollutionList[i]->setText("優");airPollutionList[i]->setStyleSheet("background-color: rgb(70, 211, 103);");}else if(day[i].airQuality > 50 && day[i].airQuality <= 100){airPollutionList[i]->setText("良");airPollutionList[i]->setStyleSheet("background-color: rgb(255, 199, 69);");}else if(day[i].airQuality > 100 && day[i].airQuality <= 150){airPollutionList[i]->setText("輕度");airPollutionList[i]->setStyleSheet("background-color: rgb(255, 199, 69);");}else if(day[i].airQuality > 150 && day[i].airQuality <= 200){airPollutionList[i]->setText("中度");airPollutionList[i]->setStyleSheet("background-color: rgb(255, 85, 0);");}else if(day[i].airQuality > 200 && day[i].airQuality <= 250){airPollutionList[i]->setText("重度");airPollutionList[i]->setStyleSheet("background-color: rgb(255, 0, 0);");}else{airPollutionList[i]->setText("嚴重");airPollutionList[i]->setStyleSheet("background-color: rgb(203, 0, 0);");}//風windDirectionList[i]->setText(day[i].windType); //風向windPowerList[i]->setText(day[i].windPower); //風力}//不添加溫度就會顯示為0℃ui->higntTemLabel->update();ui->lowTemLabel->update();
}
更新UI界面完成!