您的位置:首页 > 产品设计 > 产品经理

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

2017-04-25 11:25 225 查看

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_OBJECT
public:
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: