Qt实现天气预报与PM2.5监测系统(8)一周天气

来源:互联网 发布:mac可以玩lol 编辑:程序博客网 时间:2024/04/29 22:16

Qt实现天气预报与PM2.5监测系统(8)一周天气

程序界面

  • 界面上共显示六天的天气情况
  • 每一列都是类ShowWeek的一个实例化,程序中由对象数组showWeek[6]

这里写图片描述

    //初始化一周天气界面,postion value    int x = 250;    for(int i=0;i<MAX_DAY;i++){        showWeek[i] = new DayData(this);        showWeek[i]->setVal(x,100,QString::number(i));        showWeek[i]->hide();        x += 120;            }#ifndef DAYDATA_H#define DAYDATA_H#include <QWidget>#include "showlabel.h"class DayData : public QWidget{    Q_OBJECTpublic:    DayData(QWidget *parent = 0);    void setVal(int x, int y,QString wicon);    void updateVal(QString *daily);signals:public slots:private:    ShowLabel *weekday;    ShowLabel *date;    ShowLabel *temp;    ShowLabel *weather;    ShowLabel *wind;    ShowLabel *windpower;    QLabel *weatherIcon;};#endif // DAYDATA_H#include "daydata.h"DayData::DayData(QWidget *parent) : QWidget(parent){    this->setMinimumSize(1024,600);    this->setMaximumSize(1024,600);}void DayData::setVal(int x, int y,QString wicon){    QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间    weekday = new ShowLabel(this);    weekday->addFontSize(2);    //weekday->setGeometry(QRect(250, 80, 100, 40));    weekday->setGeometry(QRect(x, y, 100, 40));    weekday->setAlignment(Qt::AlignHCenter);    weekday->setText(tr("今天"));    date = new ShowLabel(this);    date->addFontSize(2);    date->setGeometry(QRect(x, y+40, 100, 40));    date->setAlignment(Qt::AlignHCenter);    date->setText(time.toString("M月d日"));    weatherIcon = new QLabel(this);    weatherIcon->setGeometry(QRect(x+10, y+100, 70, 70));    QString iconStr = ":/images/weathercn02/" + wicon + ".png" ;    weatherIcon->setPixmap(QPixmap(iconStr));    weatherIcon->setScaledContents(true);    temp = new ShowLabel(this);    temp->addFontSize(3);    temp->setGeometry(QRect(x, y+210, 100, 40));    temp->setAlignment(Qt::AlignHCenter);    temp->setText(tr("2-9℃"));    weather = new ShowLabel(this);    weather->addFontSize(3);    weather->setGeometry(QRect(x, y+250, 100, 40));    weather->setAlignment(Qt::AlignHCenter);    weather->setText(tr("晴"));    wind = new ShowLabel(this);    wind->addFontSize(-2);    wind->setGeometry(QRect(x, y+340, 100, 40));    wind->setAlignment(Qt::AlignHCenter);    wind->setText(tr("风"));    windpower = new ShowLabel(this);    windpower->addFontSize(0);    windpower->setGeometry(QRect(x, y+380, 100, 40));    windpower->setAlignment(Qt::AlignHCenter);    windpower->setText(tr("3级"));}void DayData::updateVal(QString *daily){    weekday->setText(daily[1]);    date->setText(daily[0].mid(5));    QString iconStr = ":/images/weathercn02/" + daily[5] + ".png" ;    weatherIcon->setPixmap(QPixmap(iconStr));    temp->setText(daily[2]+tr("-")+daily[3]+tr("℃"));    weather->setText(daily[4]);    wind->setText(daily[6]);    windpower->setText(daily[7]);}

界面数据更新

//更新显示的数据    if(temp_timer>=300 || sysSet->getFlagVal()==1){        ...        this->get_week_value();        for(int i=0;i<MAX_DAY;i++){            showWeek[i]->updateVal(weekArr[i]);        }        ...    }

解析数据
python程序从云端获取的一周天气数据写入文件week_file,通过get_week_value方法从文件中解析出有效的数据到QString数组中。

int SysDialog::get_week_value(void){    FILE *fp;    char read_buf[LEN];    char buf[LEN];    char *p,*temp;    int i=0,len=0,daily=0,item=0;    bzero(read_buf,LEN);    fp = fopen(WEEK_FILE,"r");    if(NULL == fp) return -1;    len = fread(read_buf,1,1024,fp);//    len= strlen(read_buf);    printf("%s\n,len=%d\n",read_buf,len);    p=read_buf;    bzero(buf,LEN);    temp = buf;    for(i=0;i<len;i++){        if(p[i] != '$'){            *temp = p[i];            temp++;        }else{            *temp=0;            temp=buf;            weekArr[daily][item] = QString(buf);            if(++item > 7){                item = 0;                if(++daily > 5)                    break;            }        }    }    return 0;}
0 0
原创粉丝点击