最近需要设计一个qt界面,在里面通过串口接收并解析出gps模块的经纬度信息,再通过调用高德地图的api进行地图的显示,作为入门qt的项目踩了不少坑,特将这个项目开源出来,供初学者参考学习。项目链接放下边啦,欢迎大家star~
https://github.com/daviddou2023/qt_screen_gps
一. 项目简介
本项目主要实现了电脑和L76K模块连接,模块连接天线把接收到gps数据从串口传给电脑,设计qt界面实现串口数据的接收和解析,并调用高德地图的api进行地图的3D显示。
1. 项目目录

2. 项目环境准备
(1)硬件准备


(2)软件准备
笔者采用的是Qt 5.15.2环境,因为需要用到Qt WebEngine 所以采用Desktop Qt 5.15.2 MVSC2019 64bit编译器,具体配置可参考笔者的另一篇文章https://blog.youkuaiyun.com/daviddou2022/article/details/140703079

3. 效果展示
可以看到打开串口后可以解析并显示出接收到的经纬度信息,并调用高德api进行地图显示(上图是2D显示),最终实现了3D显示。
二. 各部分代码介绍
1. project文件
QT += core gui widgets serialport webenginewidgets
QMAKE_PROJECT_DEPTH = 0
msvc {
QMAKE_CFLAGS += /utf-8
QMAKE_CXXFLAGS += /utf-8
}
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
这里需要注意的是因为使用到了Qt WebEngine所以需要加入以下一段代码
QT += core gui widgets serialport webenginewidgets
QMAKE_PROJECT_DEPTH = 0
msvc {
QMAKE_CFLAGS += /utf-8
QMAKE_CXXFLAGS += /utf-8
}
具体踩坑过程可以参考笔者上一篇https://blog.youkuaiyun.com/daviddou2022/article/details/140703079 说多了都是泪啊
2. mainwindow.h文件
一些函数的声明和库的引用
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSerialPort>
#include <QTimer>
#include <QWebEngineView>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_openMyCom1_clicked(); // 打开串口按钮的槽函数
void on_closeMyCom1_clicked(); // 关闭串口按钮的槽函数
void readMyCom1(); // 读取串口数据的槽函数
private:
void Com1Init(); // 初始化串口
void sendInitializationCommand(); // 发送初始化指令
void clear_gps(); // 清除GPS显示数据
void parseGPSData(const QString &data); // 解析GPS数据
void processBuffer(); // 处理缓冲区数据
Ui::MainWindow *ui;
QSerialPort *myCom1; // 串口对象
bool isComOpen1; // 串口是否打开的标志
QTimer *readTimer; // 定时器对象
QWebEngineView *mapView; // 地图视图对象
QString bu