基於Qt的車載GPS監控系統(4)系統狀態

基於Qt的車載GPS監控系統(4)系統狀態

嵌入式開發培訓(階段3)嵌入式圖形應用開發視頻地址
冷鏈車載GPS監控系統 視頻地址

系統狀態界面

這裏寫圖片描述

頭文件

#ifndef SHOW_H
#define SHOW_H
#include <QtGui>
#include"dht9000.h" //配置系統頭文件

class ShowDialog : public QDialog
{
    Q_OBJECT
public:
    ShowDialog(QWidget *parent=0);
public slots:
    void showState();   //更新系統狀態SLOTS
protected:
    struct st_sys_dev g_dev[1]; //配置文件結構體
private:
    QLabel *labelBg;    //設置窗口背景label
    QLabel *labelTime;  //時間
    QLabel *labelTemp;  //溫度
    QLabel *labelTmTime;//保鮮時長
    QLabel *labelGps;   //GPS定位信息
    QLabel *labelTired; //駕駛時長
    QLabel *labelSpeed; //即時車速

    QLineEdit *lineTitle;
    QLineEdit *lineTime;
    QLineEdit *lineTemp;
    QLineEdit *lineTmTime;
    QLineEdit *lineGps;
    QLineEdit *lineTired;
    QLineEdit *lineSpeed;

    QToolButton *toolButton;//返回按鍵
};
#endif // SHOW_H

配置頭文件

#ifndef GP9000_H
#define GP9000_H
#include<unistd.h>
#include<string.h>
#include<stdio.h>
#include<fcntl.h>      /*文件控制定義*/
#include<termios.h>    /*PPSIX終端控制定義*/

#define ON          1
#define OFF         0
#define CONFIG_FILE     "g9.cfg"
#define MAX_SYS_USER_NUM 3
#define MAX_RECORD  20      //溫溼度最大的記錄條數N  (N+1)
#define LOG_TIME    5       //日誌記錄間隔(分)
#define DEF_T_UPP   30      //默認溫度上限(C)
#define DEF_T_LOW   5       //默認溫度下限(C)
#define DEF_T_SET   5       //默認溫度回差(C)
#define DEF_M_TIME  5       //默認檢測間隔時間(s)

#define SYS_NAME    "GP9001"    //系統名稱
#define SYS_ID      9001        //系統ID號
#define MENU_BUF_SIZE   64

int make_default_config(struct st_sys_dev * dev);
int save_dev(struct st_sys_dev * dev);
int load_dev(struct st_sys_dev * dev);
int init_com(int fd);

//時間
struct st_date_time{
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;
};

//GPS信息
struct st_gps_info{
    double  latitude;                       //經度
    double  longitude;                      //緯度
    float   speed;                          //速度
    float   direction;                      //航向
    unsigned char NS;
    unsigned char EW;
};


//報警參數設置
struct st_alarm_set{
        char temp_upper;//溫度上限
        char temp_lower;//溫度下限
        char temp;
        char temp_change_set;//溫度回差
        char monitor_time;//檢測間隔時間
};

//用戶帳號信息
struct st_user{
        char    name[8];            //帳號名
        char    passwd[8];          //密碼
        int     purview;            //權限
        int     enable;             //啓用標誌
};


//記錄內容:序號 日期 時間 溫度 溼度: 2010/10/23 12:34 23 65
struct st_log_data{
        float log_temp;             //溫度
        float log_humi;             //溼度
        char  state;                //記錄報警狀態
        char  date[10];
        char  time[8];
};

//系統設置
struct st_sys_info{
   char supplier[10];           //製造商編號
   char hd_ver[10];             //硬件版本號
   char sw_ver[10];             //軟件版本號
   char serial[10];             //設備生產系列號
   char manu_data[10];      //Manufacture date
};


//系統總體數據結構
struct st_sys_dev{
    struct st_sys_info    sys_info; //系統基本信息
    struct st_alarm_set   alarm_set;//溼溫度報警
    struct st_gprs        gprs_set; //gprs模塊設置
    struct st_user        user[MAX_SYS_USER_NUM];//用戶設置
    struct st_log_data    logd[MAX_RECORD];
    int                   log_time; //記錄間隔時長
    int                   log_index;//記錄下標
    int                   log_count;//有效記錄總數
};


#endif // GP9000_H

系統狀態實現程序

#include<QDebug>
#include"show.h"
#include"dht9000.h"

ShowDialog::ShowDialog( QWidget *parent)
    : QDialog( parent)
{
    load_dev(g_dev);

    //計時器對象,1秒鐘發送一個timeout()信號,調用showState()函數
    QTimer *timer = new QTimer(this);
    timer->start(1000);
    connect(timer, SIGNAL(timeout()), this, SLOT(showState()));

    this->setMinimumSize(800,480);
    this->setMaximumSize(800,480);

    //窗口標題
    this->setWindowIcon(QPixmap( ":/images/1.png") );
    this->setWindowTitle(tr("GP9001車載GPS監控系統"));
    //窗口背景
    labelBg = new QLabel(this);
    labelBg->setGeometry(QRect(0, 0, 800, 480));
    labelBg->setPixmap(QPixmap(":/images/9001bg.jpg"));
    labelBg->setScaledContents(true);
    //窗口功能標題
    lineTitle = new QLineEdit(this);
    //設置顯示數字字體大小
    QFont font = lineTitle->font();
    font.setPointSize(font.pointSize() + 5);
    lineTitle->setFont(font);
    lineTitle->setText(tr("系統狀態"));
    lineTitle->setReadOnly(true);
    lineTitle->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    lineTitle->setGeometry(QRect(300, 110, 200, 35));
    //獲取系統時間
    QTime time = QTime::currentTime();
    QString textTime = time.toString("hh:mm:ss A");

    labelTime= new QLabel(this);
    labelTime->setText(tr("系統時間:"));
    labelTime->setGeometry(QRect(80, 200, 80, 25));

    lineTime = new QLineEdit(this);
    lineTime->setGeometry(QRect(180, 200, 180, 25));
    lineTime->setReadOnly(true);
    lineTime->setAlignment(Qt::AlignHCenter);
    lineTime->setText(textTime);

    labelTemp = new QLabel(this);
    labelTemp->setText(tr("車廂溫度:"));
    labelTemp->setGeometry(QRect(80, 250, 80, 25));

    lineTemp = new QLineEdit(this);
    lineTemp->setGeometry(QRect(180, 250, 180, 25));
    lineTemp->setReadOnly(true);
    lineTemp->setAlignment(Qt::AlignHCenter);
    lineTemp->setText(QString::number(15.55,'f',2)+tr("℃"));

    labelTmTime = new QLabel(this);
    labelTmTime->setText(tr("保鮮時長:"));
    labelTmTime->setGeometry(QRect(80, 300, 80, 25));

    lineTmTime = new QLineEdit(this);
    lineTmTime->setGeometry(QRect(180, 300, 180, 25));
    lineTmTime->setReadOnly(true);
    lineTmTime->setAlignment(Qt::AlignHCenter);
    lineTmTime->setText(QString::number(3)+tr("小時")+QString::number(22)+tr("分"));

    labelGps= new QLabel(this);
    labelGps->setText(tr("衛星定位:"));
    labelGps->setGeometry(QRect(420, 200, 80, 25));

    lineGps = new QLineEdit(this);
    lineGps->setGeometry(QRect(520, 200, 180, 25));
    lineGps->setReadOnly(true);
    lineGps->setAlignment(Qt::AlignHCenter);
    lineGps->setText(tr("經度:123.44 緯度:34.54"));

    labelTired = new QLabel(this);
    labelTired->setText(tr("行駛時長:"));
    labelTired->setGeometry(QRect(420, 250, 80, 25));

    lineTired = new QLineEdit(this);
    lineTired->setGeometry(QRect(520, 250, 180, 25));
    lineTired->setReadOnly(true);
    lineTired->setAlignment(Qt::AlignHCenter);
    lineTired->setText(QString::number(3)+tr("小時")+QString::number(22)+tr("分"));


    labelSpeed = new QLabel(this);
    labelSpeed->setText(tr("即時速度:"));
    labelSpeed->setGeometry(QRect(420, 300, 80, 25));

    lineSpeed = new QLineEdit(this);
    lineSpeed->setGeometry(QRect(520, 300, 180, 25));
    lineSpeed->setReadOnly(true);
    lineSpeed->setAlignment(Qt::AlignHCenter);
    lineSpeed->setText(QString::number(12.55,'f',2)+tr("公里/小時"));


    toolButton = new QToolButton(this);
    toolButton->setGeometry(QRect(350, 360, 100, 100));
    toolButton->setText( tr( "返  回" ) );
    toolButton->setIcon( QPixmap( ":/images/6.png") );
    toolButton->setIconSize( QPixmap( ":/images/6.png").size() );
    toolButton->setAutoRaise( TRUE );
    toolButton->setToolButtonStyle( Qt::ToolButtonTextUnderIcon);
    connect(toolButton,SIGNAL(clicked()),this,SLOT(accept()));
}

void ShowDialog::showState()
{
    QTime time = QTime::currentTime();
    QString textTime = time.toString("hh:mm:ss A");
    lineTime->setText(textTime);

    float temp;
    temp = rand()%100;
    lineTemp->setText(QString::number(temp,'f',2));

    int tem_max,tem_min;
    tem_max = g_dev->alarm_set.temp_upper;
    tem_min = g_dev->alarm_set.temp_lower;

    //判斷一下極限值是否報警
    QPalette pal = lineTemp->palette();//調色板對象
    QColor color;
    if(temp>tem_max || temp<tem_min){
        color = QColor(Qt::red);
    }else{
        color = QColor(Qt::green);
    }
    pal.setColor(QPalette::Base, color);//設置控件背景色
    lineTemp->setPalette(pal);//設置對象調色板
    lineTemp->update();//更新對象

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章