Qt - 读取GPS数据

2023-05-16

1.GPS型号为ublox(EVK-M8L),配有USB接口,Qt版本5.7

2.实现步骤:

(1)实现串口通信

  采用Qt5.7 内置的串口操作类QSerialPort和QSerialPortInfo,通过QSerialPortInfo提供的函数availablePorts(),可枚举出当前计算机中可用的com口。使用该类需在pro文件中添加:

QT += serialport

(2)筛选感兴趣的信号,解析

  GPRMC数据包基本上包含经纬度、航向角、时间等常用的信号。

3.效果图

4.源码

4.1 头文件

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QSerialPort>
 6 #include <QSerialPortInfo>
 7 
 8 namespace Ui {
 9 class MainWindow;
10 }
11 
12 class MainWindow : public QMainWindow
13 {
14     Q_OBJECT
15 
16 public:
17     explicit MainWindow(QWidget *parent = 0);
18     ~MainWindow();
19 
20 public:
21  QSerialPort serial;//串口实例
22  void initSeialPort();//初始化串口函数
23 private:
24     void gpsParse(QByteArray GPSBuffer);//gps解析函数
25 
26 
27 private slots:
28     void serialRead();
29 
30     void on_connectBtn_clicked();
31 
32     void on_closeBtn_clicked();
33 
34 private:
35     Ui::MainWindow *ui;
36 };
37 
38 #endif // MAINWINDOW_H

4.2实现文件

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 #include<QDebug>
  4 #include <QList>
  5 
  6 MainWindow::MainWindow(QWidget *parent) :
  7     QMainWindow(parent),
  8     ui(new Ui::MainWindow)
  9 {
 10     ui->setupUi(this);
 11     QStringList strBaud;
 12     strBaud<<"4800"<<"9600"<<"115200";
 13     ui->baudcomboBox->addItems(strBaud);
 14 
 15     initSeialPort();
 16 }
 17 
 18 MainWindow::~MainWindow()
 19 {
 20     delete ui;
 21 }
 22 
 23 void MainWindow::initSeialPort()
 24 {
 25     connect(&serial,SIGNAL(readyRead()),this,SLOT(serialRead()));   //连接槽
 26 
 27     //获取计算机上所有可用串口并添加到comboBox中
 28     QList<QSerialPortInfo>  infos = QSerialPortInfo::availablePorts();
 29     if(infos.isEmpty())
 30     {
 31         ui->portcomboBox->addItem("无串口");
 32         return;
 33     }
 34     foreach (QSerialPortInfo info, infos) {
 35         ui->portcomboBox->addItem(info.portName());
 36         qDebug() << info.portName();
 37     }
 38 
 39 }
 40 
 41 
 42 void MainWindow::serialRead()
 43 {
 44     QByteArray qa = serial.readAll();
 45 
 46     ui->textEdit->append(qa);
 47 
 48      gpsParse(qa);
 49 
 50      ui->statusLabel->setText("读取中...");
 51 }
 52 
 53 void MainWindow::gpsParse(QByteArray GPSBuffer)
 54 {
 55 
 56  //    qDebug()<<GPSBuffer.size();
 57 
 58     if(GPSBuffer.contains("$GNRMC") )
 59     {
 60 
 61         QList<QByteArray> gpsByteArrays = GPSBuffer.split(',');
 62         int count = gpsByteArrays.count();
 63 
 64     int  gpsLat_1 = static_cast<int>(gpsByteArrays.at(3).toDouble()/100);
 65     double gpsLat_2 = (gpsByteArrays.at(3).toDouble() - gpsLat_1 * 100)/60;
 66     double gpslat=gpsLat_1 + gpsLat_2;
 67 
 68     int gpsLong_1 = static_cast<int>(gpsByteArrays.at(5).toDouble()/100);
 69     double gpsLong_2 = (gpsByteArrays.at(5).toDouble()-gpsLong_1 * 100)/60;
 70     double gpsLong = gpsLong_1 + gpsLong_2;
 71     
 72     ui->timelineEdit->setText(gpsByteArrays.at(1));
 73     ui->latlineEdit->setText(QString::number(gpslat,'g',9));
 74     ui->longlineEdit->setText(QString::number(gpsLong,'g',10));
 75 
 76     if(!gpsByteArrays.at(8).isEmpty())
 77         ui->headlineEdit->setText(gpsByteArrays.at(8));
 78 
 79 
 80     }
 81 }
 82 
 83 void MainWindow::on_connectBtn_clicked()
 84 {
 85     QSerialPortInfo info;
 86         QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
 87         int i = 0;
 88         foreach (info, infos) {
 89             if(info.portName() == ui->portcomboBox->currentText()) break;
 90             i++;
 91         }
 92 
 93         if(i != infos.size ()){//can find
 94            ui->statusLabel->setText("串口打开成功");
 95 
 96             serial.close();
 97             serial.setPort(info);
 98             serial.open(QIODevice::ReadWrite);          //读写打开
 99             switch (ui->baudcomboBox->currentIndex()) {
100             case 0:
101                 serial.setBaudRate(QSerialPort::Baud4800);
102                 break;
103             case 1:
104                   serial.setBaudRate(QSerialPort::Baud9600);
105                   qDebug()<<"9600";
106                 break;
107             case 2:
108                   serial.setBaudRate(QSerialPort::Baud115200);
109                   qDebug()<<"115200";
110             default:
111                 break;
112             }
113 
114       //      serial.setBaudRate(QSerialPort::Baud9600);  //波特率
115     //      serial.setDataBits(QSerialPort::Data8);     //数据位
116     //      serial.setParity(QSerialPort::NoParity);    //无奇偶校验
117     //      serial.setStopBits(QSerialPort::OneStop);   //无停止位
118     //      serial.setFlowControl(QSerialPort::NoFlowControl);  //无控制
119         }else{
120             serial.close();
121 
122             ui->statusLabel->setText("串口打开失败");
123         }
124 }
125 
126 void MainWindow::on_closeBtn_clicked()
127 {
128     serial.close();
129     ui->statusLabel->setText("串口断开");
130 }

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

Qt - 读取GPS数据 的相关文章

  • GPS/GIS 计算:根据运动/每小时预测未来位置的算法?

    寻找资源或算法来在导航应用程序中计算以下内容 如果我当前的 GPS 位置为 0 0 并且我以 15 英里 小时的速度前进 32 度 我如何计算 10 秒后我的位置 i e GPSCoordinate predictedCoord GPSCo
  • 信号好的情况下GPS更新间隔越快?

    我试图限制我的程序每 10 秒更新一次位置 而不是不断更新 以减少电池消耗 当我在室内调试且信号较弱 即 GPS 图标闪烁 时 此方法工作正常 但如果手机得到正确修复 即 GPS 图标静态 更新间隔会增加到大约一秒 我知道代码mLocati
  • GPS坐标:一个点周围1平方公里

    我希望有人能给我提供一个方程来计算给定点周围 1 公里的平方 X 从 a aaa 到 b bbb Y 从 c ccc 到 c ccc 例如lat 53 38292839 and lon 6 1843984 我还需要围绕一个点 2 公里 5
  • 如何在 Android 中找到附近的应用程序用户?

    我正在制作一个应用程序 需要能够找到附近的人 他们是我的应用程序的用户 我看了很多类似问题的答案 似乎我别无选择 只能不断将用户的当前位置上传到服务器 并在必要时获取附近的用户列表 那么我的问题是 1 要获取附近的列表 应该有一些计算距离的
  • 在带有校准点的地图上将经度和纬度转换为 X Y

    如果我有一张尺寸为 sizeX sizeY 的 jpeg 地图 以及地图上的一些校准点 X Y 经度 纬度 使用给定的经度 纬度对计算地图中相应 XY 点的算法是什么 这对我有用 没有那么多废话 int x int MAP WIDTH 36
  • Java中的多点三边测量算法

    我正在尝试在我的 Android 应用程序中实现三边测量算法来确定用户的室内位置 我正在使用超宽带信标来获取到固定点的距离 我能够采用中建议的方法三边测量法 Android Java https stackoverflow com ques
  • 设置模拟位置时 GPS 提供商未知错误?

    我正在尝试设置我的模拟位置 但是 我收到以下错误 提供商 gps 未知 并且不确定出了什么问题 我已经获得了在manifest xml 中声明的所有权限以及所有参数 模拟定位法 Initiates the method to set the
  • 如何从广播接收器中取消注册侦听器并停止服务

    在我的应用程序中 我有一个广播接收器 当接收到短信中的关键字时 它会启动一项跟踪手机 GPS 位置的服务 我这样做使用 context startService new Intent context TrackGPS class 我还需要能
  • Android 中如何在不使用 getLastKnownLocation 方法的情况下获取当前的纬度和经度?

    我正在尝试获取current手机的位置 为此我使用GPS追踪器教程 http www androidhive info 2012 07 android gps location manager tutorial 问题总是使用该方法getLa
  • Google 地图 (Android) 中的位置更新率

    我正在编写一个简单的基于 GPS 的应用程序 用于位置感知 每当启用 GPS 时 应用程序都会请求位置更新并以格式打印纬度和经度 TextView 如果 GPS 被禁用 位置提供商会回退到LocationManager NETWORK PR
  • 如何将timestamp_t转换为实际时间?

    我见过很多使用 time t 的例子 但 timestamp t 让我感到困惑 我正在做一个作业 我们需要打印出 GPS 数据 并且 GPS 设备返回一个类型 timestamp t 来表示它的时间戳和纪元时间 我尝试过使用 gmtime
  • 如何知道jar文件是否已经在运行?

    经过谷歌研究后 我找到了很好的答案 例如 1 using jps or jps l让 jars 在 JVM 下运行 这个答案可以 但是如果用户根本没有安装java并且我使用例如 bat文件和带有java JRE的文件夹运行我的jar 另外
  • 向 tk103 GPS 跟踪器发送命令

    我正在使用 php 开发实时 GPS 跟踪器 Web 应用程序 跟踪器参考号是tk103 我可以从跟踪器接收信息并将其存储到数据库中 设备的 GPRS 模式已启用 我的问题是 如何使用 php ini 将命令从服务器发送到设备 提前致谢 这
  • 如何找到特定路线上两点之间的距离?

    我正在为我的大学开发一个 Android 应用程序 可以帮助学生跟踪大学巴士的当前位置 并为他们提供巴士到达他们的预计时间 截至目前 我获取了公交车的当前位置 通过公交车上的设备 和学生的位置 我陷入了必须找到两个 GPS 坐标之间的距离的
  • python:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆
  • 在 iOS 上从 GPS 获取时间

    我正在开发一个跟踪器应用程序 该应用程序需要高精度地了解设备位置 即它使用位置服务并忽略水平精度低于 20 米的位置 CLLocation没有明确声明是否通过 GPS 确定 但是 如果水平精度为 20 米或更好 则可以认为它是来自 GPS
  • 获取当前 GPS 时出现 NullPointerException

    我有一个测试屏幕 其中有一个按钮 按下它会调用该服务 我正在尝试实现一种方法来获取当前用户的当前 GPS 位置 但在尝试调用时它崩溃了 谁能告诉我问题是什么吗 package com example whereyouapp import j
  • 如何在Android中获取当前位置[重复]

    这个问题在这里已经有答案了 我在使用 Android 定位系统的网络提供程序获取当前位置坐标时遇到麻烦 已经阅读了大量教程并在我的项目中实现了 4 或 5 个现有类 所有这些类都给了我最后的坐标 但不是当前的坐标 我很确定这个问题是我所缺少
  • 使用 WiFi 获取位置详细信息

    我正在 Android 中创建一个小应用程序 它指向当前位置 我已经使用了 GPS 提供商 但发现在某些地方我无法使用 GPS 提供商获取数据 任何人都可以帮我得到这个吗 如果您已连接到 WIFI 则只需使用网络提供商即可更新您的位置 他们
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp

随机推荐

  • ROS学习笔记3:ROS架构(了解)

    笔记3不涉及实际操作 xff0c 主要是用自己的语言和思路简略整理了 ROS机器人开发实践 一书第2章内容 第一次看这一章的内容会有不知道在讲什么的感觉 xff0c 但这一章的内容确实对后续实践操作章节的理解有非常大的帮助 一 ROS架构
  • SLAM学习笔记2:SLAM的数学表述

    1 SLAM问题 xff1a 在了解了SLAM中各个模块的组成和主要功能后 xff0c 我们将上升到理性层次 xff0c 用数学语言来描述SLAM过程 现在假设由无人车搭载传感器 对于传感器来说 xff0c 虽然它的运动是时间连续的 xff
  • ROS学习笔记10:TF坐标变换(ROS常用组件)

    前言 xff1a 机器人本体和机器人的工作环境中往往存在大量的组件元素 xff0c 在机器人设计和应用中会涉及不同组件的位置和姿态 xff0c 这就需要引入坐标系和坐标变换的概念 一 机器人中空间描述和变换 xff1a 1 位置描述 xff
  • ROS学习笔记11:launch启动文件(ROS常用组件)

    一 launch启动文件介绍 xff1a 上节的海龟跟随实验 xff0c 输入的指令比较繁杂 xff0c 很容易输错命令 对于这种多节点任务 xff0c 可以使用启动文件 启动文件是ROS中一种可以通过xml文件 xff0c 同时启动多个节
  • 学习ARM架构,系统移植和驱动开发总结

    本次结束了对ARM架构 xff0c 系统移植和驱动开发的学习 xff0c 它们都是属于底层 xff0c 难度想对都比较的难一点 xff0c 但先学习arm架构之后去学习系统移植和驱动开发 xff0c 会使自己对系统移植和驱动开发容易理解点
  • Robocup2D环境搭配以及安装(Ubuntu18.04)

    个人是看过很多安装教程并且在一次次实验成 xfeff 功后得出的成果 xff1a 首先 xff0c 在gitee网站下载安装所需的文件夹 xfeff gitee网站下载zip压缩包 其次 xff0c 进行依赖库的安装 终端输入 sudo a
  • 树莓派配置网络实现ssh登录

    上面一篇文章我实现了串口方式访问树莓派 xff0c 可以实现树莓派开发 xff0c 但每次都需要接线 xff0c 比较麻烦所以我们可以对树莓派进行配置让他可以用IP地址登录 1 配置树莓派接入网络 sudo nano etc wpa sup
  • 字符串查找函数strstr

    前言 xff1a 本章我们将学习如何用strstr函数在字符串中查找是否存在指定的字符串 strstr 功能 xff1a 在一个字符串中查找是否存在指定的字符串 xff08 定位子字符串 xff09 cplusplus介绍如下 xff1a
  • Module not found: Error: Can‘t resolve ‘querystring‘ in ‘xxxxxxxxx‘

    解决办法 request js里面 import qs from 34 querystring 34 改为import qs from 34 qs 34
  • 【C语言】初学者写基础代码的基本步骤

    一 写代码 xff08 底阿妈 xff09 步骤 xff1a 1 创建一个项目 2 创建一个源文件 什么是源文件 xff1a xxxx c c开头的叫源文件 xxxx h h开头的叫头文件 3 写代码 xff08 底阿妈 xff09 one
  • ROS新手学习路线

    希望这些信息能够帮助你学习ROS 如果你有任何其他问题 xff0c 请随时告诉我 安装ROS 首先 xff0c 你需要在你的计算机上安装ROS 请参阅官方文档中的 安装 章节 xff0c 了解如何在你的系统上安装ROS xff1a http
  • JAVA学习心得体会

    这周是考试结束第一周 xff0c 刚开始继续学习JAVA时 xff0c 短时间不学习就感觉遗忘了许多有关JAVA的知识 xff0c 所以及时的复习所学内容是真的很重要 通过学长学姐的介绍 xff0c 我发现Typora记笔记是真的很方便 x
  • Ubuntu18.04在ROS下利用realsenseD435i相机实时运行ORB-SLAM2

    1 安装realsenseD435i的SDK Librealsense 可以参照这位博主 6条消息 Ubuntu18 04 43 ROS melodic 安装使用 InterRealSenseD435i SDK2和RealSense ROS
  • opencv-python识别魔方特定颜色方块,并输出各方块中心坐标

    先叠个甲 xff08 作者寒假才开始自学opencv xff0c 做题练手 xff0c 还不是很熟练 xff0c 如果有不正确或者有更好的方法 xff0c 欢迎在评论区指出 xff09 题目 xff1a 从网上寻找任一魔方图片 xff0c
  • Git教程学习笔记及VScode中Git使用

    文章目录 前言1 配置git2 创建版本库3 版本回退4 工作区和暂存区5 添加远程仓库6 分支管理处理bug分支多人协作 7 标签管理8 自定义git9 VScode中的Git使用 前言 欢迎通过我的个人博客看本篇文章https sunm
  • Qt的基本数据类型

    1 1 基本数据类型 qint8 signed charqint16 signed shortqint32 signed intqint64 long long int int64 on Windows qreal doublequint8
  • Qt——Javascript/Qt交互、脚本化

    Qt提供了对Javascript的良好支持 如果查阅过文档你就知道Qt有两个不同的Js封装引擎 xff1a QScriptEngine QJSEngine QScriptEngine出现的比较早 xff08 自Qt4 3始 xff09 xf
  • QT自绘标题和边框

    在QT中如果想要自绘标题和边框 xff0c 一般步骤是 xff1a 1 xff09 在创建窗口前设置Qt FramelessWindowHint标志 xff0c 设置该标志后会创建一个无标题 无边框的窗口 2 xff09 在客户区域的顶部创
  • Qt:QSqlQuery

    0 说明 QSqlQuery提供了执行SQL代码的方法 QSqlQuery封装了在QSqlDatabase中查询 检索数据的相关函数 它可以用来执行如SELECT INSERT UPDATE DELETE等方法 xff0c 也可以执行如CR
  • Qt - 读取GPS数据

    1 GPS型号为ublox xff08 EVK M8L xff09 xff0c 配有USB接口 xff0c Qt版本5 7 2 实现步骤 xff1a 1 实现串口通信 采用Qt5 7 内置的串口操作类QSerialPort和QSerialP