QT之GPS

2023-05-16

http://blog.sina.com.cn/s/blog_7da13b510100xtgr.html

 

前几天发现手里还闲着一块GPS 佳明的15W  也不知道是好的还是坏的呵呵一时兴起我就趁周六日没什么事情

用qt做了一个界面 现在已经调试完毕 可以再2440的arm板子上正确运行  环境fedora9+qt4.5.3+arm-linux-gcc4.3.3

界面如下

                              QT之GPS

                                              

                                           定位正常
                                       QT之GPS

                                                未定位

 

主要代码实现如下:

GPS.h文件


   

#ifndef KTEST01_H  

#define KTEST01_H  

   

#include <QWidget>   

#include "ui_Gps.h"   

#include<QDebug>   

   

  

#include <stdio.h>   

#include <unistd.h>   

#include <stdlib.h>   

#include <sys/types.h>   

#include <sys/stat.h>   

#include <sys/ioctl.h>   

#include <fcntl.h>   

#include <linux/fs.h>   

#include <errno.h>   

#include <string.h>   

#include <termios.h>   

#include <pthread.h>   

  

class Gps: public QWidget, private Ui::Form   

{   

 Q_OBJECT   

   

public:   

 Gps(QWidget* parent = 0, Qt::WFlags fl = 0 );   

 ~Gps();   

 int i;   

 int j;   

 bool openflag;   

 int file_fd;   

 int GpsYes;   

    

   

public slots:   

    

   

protected:   

    

   

protected slots:   

    

 void paintEvent(QPaintEvent *event);   

 void updategps(void);   

 void updatepaint(void );   

};   

class GPRMC   

{   

public:   

 char UTCtime[7];   

 char effect[2];   

 char weidu[10];   

 char NorS[21];   

 char jingdu[11];   

 char EorW[2];   

 char speed[6];   

 char direct[6];   

 char UTCcal[7];   

 char cipianjiao[6];   

 char pjfx[2];   

 char mod[2];   

};   

#endif   

   

   

 

*******************************GPS.cpp文件***********************************************


   

   

#include "Gps.h"   

#include <QtGui/QPainter>   

Gps::Gps(QWidget* parent, Qt::WFlags fl)   

: QWidget( parent, fl ), Ui::Form()   

{ i=50;   

 j=0;   

 setupUi(this);   

 GpsYes=0;   

 gpslabel->setText(QApplication::translate("Form", "\346\234\252\345\256\232\344\275\215", 0, QApplication::UnicodeUTF8));   

 qDebug()<<QObject::tr("open button pressed");   

 file_fd=open("/dev/ttySAC1",O_RDWR|O_NONBLOCK|O_NOCTTY); //打开串口1   

 if(file_fd>=0)   

 {   

 openflag=1;   

 qDebug()<<QObject::tr("open succeed");   

 struct termios Srpt;   

 tcgetattr(file_fd,&Srpt);   

 cfsetispeed(&Srpt,B4800);   

 cfsetospeed(&Srpt,B4800);   

 Srpt.c_cflag &= ~PARENB;   

 Srpt.c_cflag &= ~CSTOPB;   

 Srpt.c_cflag |= CS8;   

 Srpt.c_lflag &= ~(ICANON |ISIG);   

 tcsetattr(file_fd,TCSANOW,&Srpt);   

   

   

 }   

 else   

 {   

 openflag=0;   

 qDebug()<<QObject::tr("open failed");   

 }    

 this->setAttribute(Qt::WA_PaintOutsidePaintEvent);   

   

}   

void Gps::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));   

 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));   

 gpslabel->setText(QApplication::translate("Form", "\346\234\252\345\256\232\344\275\215", 0, QApplication::UnicodeUTF8));   

 }   

 painter1.drawEllipse(190, 30, 10, 10);   

   

}   

   

Gps::~Gps()   

{   

}   

void Gps::updategps(void)   

{   

 qDebug()<<QObject::tr("enter timer");   

 char buff[2048]="0";   

 char Rmcbuff[80];   

 int counttemp;   

 GPRMC RPM;   

 lseek(file_fd,0,SEEK_SET);   

 int count=0;   

 count=read(file_fd,buff,2048); //从串口中读取数据   

 count=512;   

 int rcvflag=0;   

   

 if(count>0)   

 {   

 char *starp;   

 for(starp=buff;starp<buff+count;starp++) //解析出RMC包   

 {   

 if((*starp)=='$')   

 {   

 starp++;   

 if((*starp)=='G')   

 {   

 starp++;   

 if((*starp)=='P')   

 {   

 starp++;   

 if((*starp)=='R')   

 {   

 starp++;   

 if((*starp)=='M')   

 {   

 starp++;   

 if((*starp)=='C')   

 {   

 starp++;   

 starp++;   

   

 for(counttemp=0;(starp<buff+count)||counttemp>=70;starp++)   

 {   

   

   

 Rmcbuff[counttemp++]=*starp;   

 if(((*starp)==0x0d)&&((*(starp-1))==0x0A))   

 {   

 break;   

 qDebug()<<"break1";   

 }   

 if(((*starp)=='\n'))   

 {   

 break;   

 qDebug()<<"break2";   

 }   

 // qDebug()<<*starp;   

 }   

 if(counttemp>=63)   

 {   

 rcvflag=1;   

 }   

 else   

 {   

 rcvflag=0;   

 }   

 qDebug()<<Rmcbuff<<"counttemp"<<counttemp;   

 break;   

 }   

 }   

 }   

 }   

 }   

 }   

 }   

 }   

 if(rcvflag)   

 {   

   

 for(counttemp=0;counttemp<=5;counttemp++) //根据包的内容填充结构体   

 {   

 RPM.UTCtime[counttemp]=Rmcbuff[counttemp];   

 }   

 RPM.UTCtime[counttemp]='\0';   

   

 RPM.effect[0]=Rmcbuff[7];   

 RPM.effect[1]='\0';   

   

 for(counttemp=9;counttemp<=17;counttemp++)   

 {   

 RPM.weidu[counttemp-9]=Rmcbuff[counttemp];   

 }   

 RPM.weidu[counttemp-9]='\0';   

   

 RPM.NorS[0]=Rmcbuff[19];   

 RPM.NorS[1]='\0';   

   

 for(counttemp=21;counttemp<=30;counttemp++)   

 {   

 RPM.jingdu[counttemp-21]=Rmcbuff[counttemp];   

 }   

 RPM.jingdu[counttemp-21]='\0';   

 RPM.EorW[0]=Rmcbuff[32];   

 RPM.EorW[1]='\0';   

   

 for(counttemp=34;counttemp<=38;counttemp++)   

 {   

 RPM.speed[counttemp-34]=Rmcbuff[counttemp];   

 }   

 RPM.speed[counttemp-34]='\0';   

   

 for(counttemp=40;counttemp<=44;counttemp++)   

 {   

 RPM.direct[counttemp-40]=Rmcbuff[counttemp];   

 }   

 RPM.direct[counttemp-40]='\0';   

   

 for(counttemp=46;counttemp<=51;counttemp++)   

 {   

 RPM.UTCcal[counttemp-46]=Rmcbuff[counttemp];   

 }   

 RPM.UTCcal[counttemp-46]='\0';   

   

 for(counttemp=53;counttemp<=57;counttemp++)   

 {   

 RPM.cipianjiao[counttemp-53]=Rmcbuff[counttemp];   

 }   

 RPM.cipianjiao[counttemp-53]='\0';   

   

 RPM.pjfx[0]=Rmcbuff[59];   

 RPM.pjfx[1]='\0';   

   

 RPM.mod[0]=Rmcbuff[61];   

 RPM.mod[1]='\0';   

 }   

 if(RPM.EorW[0]=='E') //设定显示   

 {   

 jingdu->setText(QApplication::translate("Form", "\344\270\234\347\273\217", 0, QApplication::UnicodeUTF8));   

 }   

 else   

 {   

 jingdu->setText(QApplication::translate("Form", "\350\245\277\347\273\217", 0, QApplication::UnicodeUTF8));   

 }   

 if(RPM.NorS[0]=='S')   

 {   

 weidu->setText(QApplication::translate("Form", "\345\215\227\345\215\212\347\220\203", 0, QApplication::UnicodeUTF8));   

 }   

 else   

 {   

 weidu->setText(QApplication::translate("Form", "\345\214\227\345\215\212\347\220\203", 0, QApplication::UnicodeUTF8));   

 }   

 weiduline->clear();   

 jingduline->clear();   

 gaoduline->clear();   

 speedline->clear();   

 directline->clear();   

 weiduline->insert(RPM.weidu);   

 jingduline->insert(RPM.jingdu);   

 gaoduline->insert("can't receive");   

 speedline->insert(RPM.speed);   

 directline->insert(RPM.direct);   

 if(RPM.effect[0]=='A')   

 {   

 GpsYes=1;   

 }   

 else   

 {   

 GpsYes=0;   

 }   

 dateTime->setTime(QTime((int)((RPM.UTCtime[0]-'0')*10+RPM.UTCtime[1]-'0'),   

 (int)((RPM.UTCtime[2]-'0')*10+RPM.UTCtime[3]-'0'),   

 (int)((RPM.UTCtime[4]-'0')*10+RPM.UTCtime[5]-'0'),0));   

   

 dateTime->setDate(QDate((RPM.UTCcal[4]-'0')*10+RPM.UTCcal[5]-'0'+2000,   

 (RPM.UTCcal[2]-'0')*10+RPM.UTCcal[3]-'0',   

 (RPM.UTCcal[0]-'0')*10+RPM.UTCcal[1]-'0'));   

}   

void Gps::updatepaint(void )   

{   

 update();   

}   

    

    

    

 *************************************主程序main.cpp**********************************  

 
   

#include <QApplication>   

#include "Gps.h"   

#include<QtGui>   

#include <QTimer>   

int main(int argc, char *argv[])   

{   

// Q_INIT_RESOURCE(application);   

 QApplication app(argc, argv);   

 QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030")); //added by song   

 Gps * mw = new Gps();   

   

 QTimer *timer = new QTimer(mw);   

 QObject::connect(timer, SIGNAL(timeout()), mw, SLOT(updategps()));   

 QTimer *timer1 = new QTimer(mw);   

 QObject::connect(timer1, SIGNAL(timeout()), mw, SLOT(updatepaint()));   

// QObject::connect(timer, SIGNAL(timeout()), mw, SLOT(update()));   

 timer->start(1000);   

 timer1->start(25);   

 mw->show();   

 return app.exec();   

}   

   

 呵呵 拿出来和大家交流交流 刚开始学习qt水平有限 希望大家指出不足
   

 说明:如有人转载请注明出处 谢谢
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT之GPS 的相关文章

  • Geopy:计算 GPS 航向/方位

    第一次在这里发海报 我正在对桥梁检查 ROV 八旋翼收集的 GPS 数据进行一些数据分析 我们有八旋翼在运行ROS http 20www ros org wiki 使用 3D 扫描激光雷达 立体视觉 INS 和其他一些巧妙的技术 我目前正在
  • 打开第3层,map.on('moveend',..):区分用户交互和map.setCenter()调用

    我正在为 GIS 应用程序实现 OL 并希望在用户滚动地图时添加 20 秒的超时 之后 GPS 自动跟踪功能应恢复 为此 我正在利用 map on moveend move func 侦听器 问题是它无法区分用户滚动还是位置更改来自map
  • 当活动被破坏时,GPS图标不会消失吗?

    作为一个尝试 GPS 东西的 Android 新手 我设法将这段代码组合在一起 它的工作原理就像我期望的那样 除了一件事 GPS 图标永远不会消失 如何让GPS图标在Activity被破坏时消失 我有 locationManager rem
  • 在android中以编程方式打开GPS [重复]

    这个问题在这里已经有答案了 可能重复 如何以编程方式在android中启用 禁用gps和移动数据 https stackoverflow com questions 16752859 how to enable disable gps an
  • 如果禁用 GPS,三星手机将无法获取位置信息

    我使用三星手机通过 LocationManager API 获取位置 如果禁用 GPS 我无法获取位置 通过网络提供商我无法获取位置 这是代码 这在 HTC 和索尼甚至禁用 GPS 中都可以正常工作 但在三星手机中则不行 public Lo
  • Android GPS 查询位置数据不正确

    我没有为此使用模拟位置 事实上 代码上周运行良好 我有一个应用程序 它收集 GPS 数据并使用应用程序本身生成的 X Y 坐标输出谷歌地图链接 我不是 100 确定为什么它没有按应有的方式工作 但是当我请求应用程序根据手机提供的 GPS 位
  • 根据 GPS 坐标计算 PNG 地图上的 X 和 Y 位置

    我正在 iPhone 应用程序上实现自定义地图 尺寸为 map width 和 map height 的图像 并尝试在该地图上显示当前用户位置 current long 和 current lat 我有 2 个参考点 具有已知的 GPS 坐
  • 将纬度和经度转换为十进制值

    我的 GPS 信息以以下形式呈现 北纬 36 57 9 西经 110 4 21 我可以使用Chris Veness 的 javascript 函数 http www movable type co uk scripts latlong ht
  • 在 Iphone SDK 中显示 GPS 可用性和准确性

    如何编程以在 iPhone 中显示 GPS 可用性和准确度级别 并且它必须擦除标签中先前的纬度 经度信息 iOS sdk 中有一个类叫做 CLLocationManager 浏览 XCode 中的文档或查找一些示例 http mobileo
  • 同时有多个位置提供商

    我的定位系统有一些问题 我有一个实现位置侦听器的服务 我希望尽可能使用网络获得最佳位置 如果网络不够准确 精度大于 300mt 则使用 GPS 问题是这样的 我每 5 分钟需要一次位置信息 如果可能的话准确 否则不准确 我从一个开始 Loc
  • 如何在用户行走时跟踪 GPS 坐标,来自 iOS 平台的 xamarin.forms

    我刚刚经历过这个link http developer xamarin com recipes ios multitasking track significant location change 当用户使用 xamarin forms 应
  • 通过js获取WebView中的位置

    我正在尝试创建 WebView 它将通过 js 获取 GPS 本地化 但是当我单击应该显示本地化的按钮时 在android 4 1 1 模拟器 中 错误代码2 无法启动地理定位服务 在 android 4 1 2 phone 中什么也没有发
  • GMSPolyline 非常大的内存峰值

    在允许用户在各种不同类型的地图上显示我们称之为轨迹的复杂位置点列表的 GPS 应用程序中 每个轨迹可以包含 2k 到 10k 个位置点 当轨迹在非 Google 地图类型上呈现时 它们会被大量剪切 修剪和路径简化 这是为了降低内存使用量并提
  • 使用 LocationManager 时,为什么打开 Wifi 但未连接有助于网络定位?

    这可能是偏离主题的 如果是这样 我道歉 并很高兴接受关闭标志 但我在弄清楚为什么 WIFI 打开但未连接到任何接入点 在我的 Android 设备上 时遇到问题 它vastly提高网络提供商使用时的准确性LocationManager 如果
  • 如何通过 GPRS 向 GPS 追踪器(TK103、GT02、GT06、TK102 等)发送命令

    这已经被问过这里https stackoverflow com questions 25460743 gps tracker tk103 how to send message through server https stackoverf
  • Android GPS 的准确度如何? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我好像在某处读过Android的GPS精度约为10厘米 任何人都可以验证或更正这个吗 原因是我正在尝试开发的应用程序会跟踪用户访问过的位置 这将极大地
  • 寻找另一部智能手机的笛卡尔坐标?

    考虑到我有两部智能手机 A 和 B 如果我拿着智能手机 A 有没有办法确定 B 相对于我自己的位置 所以如果我们有这张图片的情况 它会告诉我 B 位于位置 2 1 利用 WiFi 信号强度来获取位置等创造性方法更受欢迎 我还可以确定两部手机
  • 从 GPS 坐标获取城市名称

    我想从 GPS 坐标获取城市的名称 我可以使用 Google API 获取 GPS 点的详细信息 http maps googleapis com maps api geocode output parameters 输出是 XML 但我不
  • 移动应用程序在后台时的 GPS 位置(使用 ionicframework)

    我需要实现一个应用程序来存储用户从 A 移动到 B 时的旅程 路径 现在 我知道 ionicframework 可以使用 GPS 但是当我的应用程序转到后台时会发生什么 我的应用程序如何继续存储用户位置 这可能吗 有没有我可以使用的插件 请
  • 如何从 Android 手机获取 GPS 数据?

    有没有办法将 Android 手机的 GPS 数据连接 USB 有线 到 PC 我目前正在使用基于 gpsd 项目的 GPSTether 应用程序 我正在寻找比该应用程序提供更多控制且错误更少的替代方案 另外 是否有另一种方法可以在不使用任

随机推荐

  • STL简介以及STL中的容器

    我认为STL 标准模板库 就是对常见数据结构和算法的再封装 xff0c 以便开发者能更加灵活的使用数据结构和常用算法 通常认为 xff0c STL由容器 算法 迭代器 函数对象 适配器 内存分配器 这 6 部分构成 容器 简单理解容器 xf
  • 奇偶校验原理及C实现

    奇偶校验 xff0c 是通过计算数据流中比特位1的个数向原数据流后补充1bit的 0 或 1 xff0c 来检查数据流是否正确的方法 奇校验 xff08 odd parity xff09 xff1a 如果字符数据位中 1 的数目为偶数 xf
  • PHP curl发送 post GET 请求 携带请求头 并接收参数 上传\下载文件或图片

    发送post 请求 64 param sUrl 请求地址 64 param aData 请求参数 64 return bool string function http post sUrl aData ch 61 curl init cur
  • C++ 类对象的初始化顺序

    C 43 43 构造函数调用顺序 1 创建派生类的对象 xff0c 基类的构造函数优先被调用 xff08 也优先于派生类里的成员类 xff09 xff1b 2 如果类里面有成员类 xff0c 成员类的构造函数优先被调用 xff1b 也优先于
  • requests模块中使用代理proxy发送请求

    1 代理概述 玩爬虫为什么我们不能使用一个固定IP发送请求 你使用一个固定IP发送每秒向对方服务器发送10几个请求 对方认为这样操作不是人干的 就把你IP给封了服务器端的人可以根据你IP很快锁定你 要求你对这种窃取行为赔偿 代理 外链图片转
  • FIFO理解

    小白一枚 以下是我在学习SCI通信时 xff0c 使用到FIFO寄存器对其手册进行学习的一些经验与心得 xff0c 为了防止以后使用时忘记 xff0c 故此记录 仅供本人使用 另 xff1a 如有理解不当之处 xff0c 欢迎指正 xff0
  • 使用CMake导入第三方库

    欢迎关注微信公众号 自动驾驶事务所 获取更多知识 欢迎关注公众号 自动驾驶事务所 xff0c 分享更多以C C 43 43 为计算机语言 xff0c 以自动驾驶为方向的文章 使用CMakeLists txt 中间需要导入第三方的库当我们需要
  • 通过onvif协议接入海康、大华NVR步骤

    通过onvif协议接入海康 大华NVR步骤 https wenku baidu com view 6f1fcf37192e45361066f54b html
  • C语言的二维数组初始化的几种方式介绍(私藏大数组初始化方式)

    C语言的二维数组初始化的几种方式介绍 1 直接赋值2 循环对每个元素赋值3 借用memset memset s初始化为0或 14 96 数组所有元素初始化为相同值 xff08 用于大数组初始化贼方便 xff09 96 1 直接赋值 适合数组
  • 怎么用管理员方式打开压缩包

    今天下载了安卓的源代码 xff0c 解压时 xff0c 报了 34 Cannot create symbolic link xxx 34 34 You may need to run WinRAR as administrator 34 的
  • Android的build-tools的下载方式

    Android的build tools的多种版本的下载 1 方式一 xff1a Android Studio上的配置下载2 官网上直接下载 1 方式一 xff1a Android Studio上的配置下载 通过参数 buildToolsVe
  • Visual Studio上一些Error的解决方案

    近期在迁移一个linux上下项目到windows xff0c 编译时出来一堆error xff0c 挑了一些做记录 目录 1 E1696无法打开源文件 unistd h2 E0020 未定义标识符 34 getcwd 34 3 E0020
  • windows下怎么查看exe是32位还是64位

    xxx exe用记事本或notepad打开 xff0c 找有字符的第二行中 PE 字符串旁边 xff0c 如果是 d xff0c 则为64位 xff1b 如果是 L xff0c 则为32位
  • 无法定位程序输入点 _ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev于动态链接库

    在执行编译出来的exe时 xff0c 报了 无法定位程序输入点 ZNSt7 cxx1118basic stringstreamIcSt11char traitsIcESaIcEEC1Ev于动态链接库 的异常 出现这个问题时 xff0c 应该
  • 踩了个C++的未定义标识符"cout"的坑

    问题表现 没怎么用过C 43 43 写过完整的项目 xff0c 今天闲来无事 xff0c 便创建个c 43 43 的工程玩玩 xff0c 结果一个简单的打印输出就给卡住了 xff0c 无法打开文件 iostream h xff0c cout
  • Electron-Vue之安装流程

    近期摒弃了熟悉的WPF xff0c 选用了新的一套工具 xff08 Electron Vue xff09 来开发桌面软件 xff08 我是连html都没用过的猿 xff0c no zuo no die xff09 接触新的东西 xff0c
  • vscode的调试配置

    文章目录 vscode的调试配置文件调试配置选项 vscode的调试配置文件 vscode的调试配置存储在 vscode文件夹的launch json文件中 通过以下步骤可以创建一个调试配置 xff1a 切换到调试视图单击create a
  • C/C++实现strcpy和strcat两个功能

    strcpy和strcat是string h头文件中分别实现字符串数组拷贝与拼接功能的函数 xff0c 详细使用相信大家都了解了 xff0c 如果还不了解看看实例 C C 43 43 笔试必须熟悉掌握的头文件系列 xff08 四 xff09
  • C/C++锁机制(boost)的认知和使用

    锁扩充 加锁的必需考虑三个问题 该锁的不锁 xff0c 将会导致各种莫名其妙的错误 xff1b 加锁范围太大 xff0c 虽然能避免逻辑错误 xff0c 但如果锁了不该锁的东西 xff0c 难免会降低程序的效率 xff1b 加锁方式不合适
  • QT之GPS

    http blog sina com cn s blog 7da13b510100xtgr html 前几天发现手里还闲着一块GPS 佳明的15W 也不知道是好的还是坏的呵呵一时兴起我就趁周六日没什么事情 用qt做了一个界面 现在已经调试完