Qt实现天气预报与PM2.5监测系统(7)今日天气

Qt实现天气预报与PM2.5监测系统(7)今日天气

程序界面

主要显示两部分内容:1.通过云端的API接口获取的天气数据,2.通过本地的 PM2.5 与温湿度模块获取的数据。

这里写图片描述

今天天气功能界面,由类ShowToday(派生于QWidget)实现。
主界面程序中初始化一个ShowToday实例。
//初始化今日天气界面
showToday = new ShowToday(this);

室内数据更新接口void setInsideVal(QString value);
网络天气更新接口void updateVal(QString *daily);

代码

头文件


#ifndef SHOWTODAY_H
#define SHOWTODAY_H
#include <QtGui>
#include "showlabel.h"

class ShowToday : public QWidget
{
    Q_OBJECT
public:
    ShowToday(QWidget *parent=0);
    void updateVal(QString *daily);
    void setInsideVal(QString value);
public slots:

private:
    ShowLabel *sysDate;
    ShowLabel *temp;
    ShowLabel *insideData;
    ShowLabel *netTemp;
    ShowLabel *weather;
    ShowLabel *netData;
    ShowLabel *updateTime;
    QLabel *weatherIcon;
};

#endif // SHOWTODAY_H

实现文件

#include "showtoday.h"

ShowToday::ShowToday( QWidget *parent)
    : QWidget( parent)
{
    this->setMinimumSize(1024,600);
    this->setMaximumSize(1024,600);

    QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间

    sysDate = new ShowLabel(this);
    sysDate->addFontSize(6);
    sysDate->setAlignment(Qt::AlignHCenter);
    sysDate->setGeometry(QRect(180,50,800,60));
    sysDate->setText(time.toString("yyyy年M月d日 dddd"));

    updateTime = new ShowLabel(this);
    updateTime->addFontSize(4);
    updateTime->setAlignment(Qt::AlignHCenter);
    updateTime->setGeometry(QRect(180,100,800,60));
    updateTime->setText(time.toString("yyyy年M月d日 dddd")+tr("更新"));


    //℃
    netTemp = new ShowLabel(this);
//    netTemp->addFontSize(32);//arm
    netTemp->addFontSize(50);//pc
//    netTemp->setGeometry(QRect(370, 130, 200, 200));//arm
    netTemp->setGeometry(QRect(400, 110, 200, 200));//pc
    netTemp->setText(tr("7℃"));

    weatherIcon = new QLabel(this);
    weatherIcon->setGeometry(QRect(650, 170, 100, 90));
    weatherIcon->setPixmap(QPixmap(":/images/weathercn02/0.png"));
    weatherIcon->setScaledContents(true);


    weather = new ShowLabel(this);
    weather->addFontSize(10);
    weather->setGeometry(QRect(210, 280, 800, 60));
    weather->setAlignment(Qt::AlignHCenter);
    weather->setText(tr("10:30更新   多云 2-9℃"));


    //显示网络数据
    netData = new ShowLabel(this);
    netData->addFontSize(4);
    netData->setGeometry(QRect(210, 365, 800, 60));
    netData->setAlignment(Qt::AlignHCenter);
    netData->setText(tr("湿度 87%    北风 2级     PM2.5 66   轻度污染"));


    //显示室内数据
    insideData = new ShowLabel(this);
    insideData->addFontSize(6);
    insideData->setGeometry(QRect(210, 460, 800, 60));
    insideData->setAlignment(Qt::AlignHCenter);
    insideData->setText(tr("室内   温度 4℃  湿度 78%  PM2.5 66"));


}

//室内数据更新
void ShowToday::setInsideVal(QString value){
    insideData->setText(value);
}

//网络天气更新
void ShowToday::updateVal(QString *arr){

    sysDate->setText(arr[1]+tr(" ")+arr[2]);

    //更新时间
    updateTime->setText(arr[11].mid(11)+tr("更新"));

    //当前温度
    netTemp->setText(arr[4]+tr("℃"));

    //天气图标
    weatherIcon->setPixmap(QPixmap(":/images/weathercn02/"+arr[7]+".png"));

    //城市,天气情况
    weather->setText(arr[0]+tr("       ")+arr[3]+tr(" ")+arr[5]+tr("-")+arr[6]+tr("℃"));

    //显示湿度,风力,空气
    netData->setText(tr("湿度 ")+arr[8]+tr("     ")+arr[9]+arr[10]+tr("     PM2.5 ")+arr[13] +tr("  ") + arr[14]);

}

设备模块初始化

在主界面程序中由DevInit(void)

int SysDialog::DevInit(void){
    fd_pm25 = ::open(COM0,O_RDONLY);
    if(fd_pm25 < 0){
            info = "Can't Open Serial Port!";
            info += COM0;
            return -1;
    }
    init_com(fd_pm25);

    info = "PM2.5 modules init OK.";
    //dht11 init
    if( (fd_dht = ::open(DEV_F_DHT,O_RDONLY)) < 0){
            printf("dht11 init error...\n");
        return -1;
    }else{
        printf("dht11 init...\n");
    }

    return 0;
}

室内更新显示
由主界面程序中的定时更新函数void SysDialog::updateSYS(void)实现

    //pm2.5 update
    bzero(buf,350);
    if(read(fd_pm25,buf,350)>0){    
        pm = 0;
        pm = da_pro(buf);
        if(pm==-1) 
            info = "Err";
        else
            info = QString::number(pm);
    }

    get_dht_data();

    value  ="温度 " + QString::number(temp-3) + "  湿度 " + QString::number(humi) +  QString("  PM2.5  ") + info;
    showToday->setInsideVal(value);

网络天气更新
系统更新时机 1 . python程序执行从云端获取新的天气数据产生新的day_file文件后。2 .间隔300秒从day_file文件读取数据。

//day_file 示例
武汉$2017-04-05$星期三$小雨$15$15$20$7$98$北风$2级$2017-04-05 09:36:04$100$81$轻度污染$108$

 //updateSYS函数中更新显示的数据
    if(temp_timer>=300 || sysSet->getFlagVal()==1){
    ...
        this->get_day_value();
        showToday->updateVal(dayArr);
    ...
    }

//从文件中解析数据
int SysDialog::get_day_value(void)
{
    FILE *fp;
    char read_buf[LEN];
    char buf[LEN];
    char key_buf[32];
    char* p,*temp;
    int i=0,j=0,len=0,key_ok=0,index=0;

    bzero(read_buf,LEN);

    fp = fopen(DAY_FILE,"r");
    if(NULL == fp) return -1;
    fread(read_buf,1,1024,fp);
    printf("%s\n",read_buf);
    p=read_buf;
    bzero(buf,LEN);
    len= strlen(read_buf);
    printf("len=%d\n",len);

    temp=buf;

    for(i;i<len;i++){
        if(p[i] != '$'){
            *temp = p[i];
            temp++;
        }else{
            *temp=0;
            temp=buf;
            dayArr[index]= QString(buf);
            if(++index > 15)
                index = 0;
        }
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值