基於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();//更新對象
}