• ??大马猴
    了解作者
  • QT
    开发工具
  • 6KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 2
    下载次数
  • 2020-12-17 14:35
    上传日期
实现GPS的信息读取定位时间的读取 在QT平台上 对初学者帮助很大
gps.zip
  • gps
  • main.cpp
    196B
  • mainwindow.h
    952B
  • happy.pro
    321B
  • happy.pro.user
    18.6KB
  • mainwindow.cpp
    5.1KB
  • mainwindow.ui
    9.5KB
  • gps.h
    838B
内容介绍
#include "mainwindow.h" #include "ui_mainwindow.h" #include<gps.h> #include<QTimer> #include<QPainter> #define GPS_LEN 512 float GPS::caculate(float *x) //change jingdu and weidu { int a; float b,c,d,e,f; a=*x/100; //30 b=(int)((*x/100-a)*100); //29 c=((*x/100-a)*100-b)*60; d=b/60; e=c/3600; f=a+d+e; return f; } int gps_analysis(char *buff,GPRMC *gps_date) { char *ptr=NULL; if(gps_date==NULL) return -1; if(strlen(buff)<10) return -1; if(NULL==(ptr=strstr(buff,"$GPRMC")))/* 如果buff字符串中包含字符"$GPRMC"则将$GPRMC的地址赋值给ptr */ return -1; /* sscanf函数为从字符串输入,意思是将ptr内存单元的值作为输入分别输入到后面的结构体成员 */ sscanf(ptr,"$GPRMC,%d.00,%c,%f,N,%f,E,%f,,%d,,,%c*",&(gps_date->time),&(gps_date->pos_state),&(gps_date->latitude),&(gps_date->longitude),&(gps_date->speed),&(gps_date->date),&(gps_date->mode)); return 0; } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); GpsYes = 0; m_fd=openSerialPort(); if(m_fd<0) { openflag=0; } else { openflag=1; } this->setAttribute(Qt::WA_PaintOutsidePaintEvent); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(1000); } MainWindow::~MainWindow() { delete ui; } void MainWindow::update() { int nread = 0; char gps_buff[GPS_LEN]; GPRMC gprmc,*gps_date; float mylatitude,mylongitude; nread = read(m_fd,gps_buff,sizeof(gps_buff)); if(nread<0) { printf("read gps_date error"); GpsYes = 0; } else { GpsYes = 1; } memset(&gprmc, 0 , sizeof(gprmc)); gps_analysis(gps_buff,&gprmc); gps_date = &gprmc; mylatitude = D.caculate(&gps_date->latitude); mylongitude = D.caculate(&gps_date->longitude); QString latitude = QString::number(mylatitude); ui->latitudeline->setText(latitude); QString altitude = QString::number(mylongitude); ui->atitudeline->setText(altitude); QString year = QString::number(gps_date->date%100); QString month = QString::number((gps_date->date/100)%100); QString day = QString::number(gps_date->date/10000); ui->dateline->setText("20"+year+"-"+month+"-"+day ); QString hour = QString::number(gps_date->time/10000+8); QString miunite = QString::number((gps_date->time/100)%100); QString second = QString::number((gps_date->time%100)); ui->timeline->setText(hour+":"+miunite+":"+second); QString speed = QString::number(gps_date->speed); ui->speedline->setText(speed); QString state; char state_one[3] ={gps_date->pos_state,'\0'}; state = state_one; ui->statusline->setText(state); QString pattern; char pattern_one[3] ={gps_date->mode,'\0'}; pattern = pattern_one; ui->patternline->setText(pattern); } void MainWindow::on_close_button_clicked() { close(); } int MainWindow::openSerialPort() { int fd=-1; fd=open("/dev/ttySAC2",O_RDWR|O_NONBLOCK); if(fd<0) { return -1; } termios serialAttr; memset(&serialAttr,0,sizeof serialAttr); serialAttr.c_iflag=IGNPAR; serialAttr.c_cflag=B9600|HUPCL|CS8|CREAD|CLOCAL; serialAttr.c_cc[VMIN]=1; if(tcsetattr(fd,TCSANOW,&serialAttr)!=0) { return -1; } return fd; } void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); i=(i+9)%360; QConicalGradient gradient(260,51,i); gradient.setSpread(QGradient::ReflectSpread); if(GpsYes) { gradient.setColorAt(0.0, Qt::white); gradient.setColorAt(0.1, Qt::darkGray); gradient.setColorAt(0.2, Qt::gray); gradient.setColorAt(0.3, Qt::lightGray); gradient.setColorAt(0.4, Qt::red); gradient.setColorAt(0.5, Qt::green); gradient.setColorAt(0.6, Qt::blue); gradient.setColorAt(0.7, Qt::yellow); gradient.setColorAt(0.8, Qt::magenta); gradient.setColorAt(0.9, Qt::yellow); gradient.setColorAt(1, Qt::green); } else { gradient.setColorAt(0.0, Qt::white); gradient.setColorAt(1, Qt::black); } painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); painter.setBrush(gradient); painter.drawEllipse(210, 1, 100, 100); QPainter painter1(this); painter1.setRenderHint(QPainter::Antialiasing, true); painter1.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::MiterJoin)); if(GpsYes) { painter1.setBrush(QBrush(Qt::red, Qt::SolidPattern)); ui->gpslabel->setText(QApplication::translate("Form", "\345\256\232\344\275\215\344\270\255", 0, QApplication::UnicodeUTF8)); } else { painter1.setBrush(QBrush(Qt::black, Qt::SolidPattern)); ui->gpslabel->setText(QApplication::translate("Form", "\346\234\252\345\256\232\344\275\215", 0, QApplication::UnicodeUTF8)); } painter1.drawEllipse(190, 30, 10, 10); }
评论
    相关推荐
    • QtGps.rar
      qt实现的飞信部分功能,应用网络传输!
    • QtGps.zip
      接受GPS数据的qt工程 ,可用于linux
    • GPS导航仪模拟程序(LINUX
      模拟GPS导航仪的定位功能。通过Linux平台实现程序代码的编写,用QT做的图形界面,实现解析GPS数据包的功能。
    • ARM-LINUX-GPS
      是在arm平台下的,linux系统的GPS程序 ARM-LINUX-GPS
    • 嵌入式linuxQT开发GPRS源码
      是基于嵌入式linuxQT开发的gprs源码,并且源码里面最重要还有一份QT界面的控件说明文档等等,源码经测试,直接可编译使用
    • 嵌入式linuxQT开发3G源码
      是基于嵌入式linuxQT开发3G源码,并且源码里面最重要还有一份QT界面的控件说明文档等等,源码经测试,直接可编译使用
    • 嵌入式linuxQT4开发GPS定位源码
      是基于嵌入式linuxQT4开发的gps定位源码,里面源码中程序启动后,设置好 波特率和 com,点击 read 按钮,将读取卫星定位信息,如经度纬度时间高度等信息等等,经测试,直接可编译使用
    • 嵌入式linuxQT开发的wifi源码
      是基于嵌入式linuxQT开发的wifi源码,并且源码里面最重要还有一份QT界面的控件说明文档等等,源码经测试,直接可编译使用
    • QtGps.rar
      实现了windows下通过串口等获取gps的经纬度数据
    • NS2example.rar
      在ns2下实现无线传感器网络仿真,多个节点进行网络活动